首页 > 其他分享 >CF1722G 题解

CF1722G 题解

时间:2022-09-01 13:37:11浏览次数:51  
标签:int 题解 个数 构造 Walk 异或 CF1722G 余数

题目

构造一个长度为 \(n\) 的数列,数列中每个数各不相同且都不超过 \(2^{31}\),使得奇数项和偶数项的异或和相等。

思路

我提供一种比较神奇的构造方法。

首先,两个数相等可以转化成两个数异或和为 \(0\),那么这题就变成了,构造一个异或和为 \(0\) 的数列。

考虑将 \(n\) 个数分成若干组,每组异或和为 \(0\),这样整个数列的异或和为 \(0\)。

我们把 \(4\) 个数分成一组,大概就是用最高 \(3\) 位构造 \(4\) 个不相同且异或和为 \(0\) 的数。

然后每组数要各不相同,所以我们用低位偏移。

所以我们就可以写出一个构造 \(4k\) 个数的函数:

void Walk (int x) { // x 为 4 的倍数
    int z = 0;
    for (int i = 1; i <= x / 4; i++) {
        int a = (1 << 30), b = (1 << 29), c = (1 << 28);
        cout << a + b + c + z << ' ' << a + b + z << ' ' << ' ' << a + c + z << ' ' << a + z << ' ';
        z++; // 偏移
    }
}

但是不能保证 \(n\) 为 \(4\) 的倍数,所以我们对 \(n\) 除以 \(4\) 的余数分类讨论:

  • 余数为 \(0\),直接 Walk(n)
  • 余数为 \(1\),用一个 \(0\) 占位,然后 Walk(n - 1)
  • 余数为 \(2\),构造 \(6\)个异或和为 \(0\) 的数(比如样例中的 \(1,2,3,4,8,12\)),然后 Walk(n - 6)
  • 余数为 \(3\),构造 \(3\) 个异或和为 \(0\) 的数(比如 \(1,2,3\)),然后 Walk(n - 3)

最后补充一下,\(3\) 个数一组应该也可以,我赛时没想到就写了一个 \(4\) 个数一组的。

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int t;
int n, m;
 
void Walk (int x) {
    int z = 0;
    for (int i = 1; i <= x / 4; i++) {
        int a = (1 << 30), b = (1 << 29), c = (1 << 28);
        cout << a + b + c + z << ' ' << a + b + z << ' ' << ' ' << a + c + z << ' ' << a + z << ' ';
        z++;
    }
}
 
int main () {
    cin >> t;
    while (t--) {
        cin >> n;
        if (n % 4 == 0) {
            Walk(n);
            cout << '\n';
        }
        if (n % 4 == 1) {
            Walk(n - 1);
            cout << "0\n";
        }
        if (n % 4 == 2) {
            Walk(n - 6);
            cout << "4 1 2 12 3 8\n";
        }
        if (n % 4 == 3) {
            Walk(n - 3);
            cout << "1 2 3\n";
        }
    }   
    return 0;
}

标签:int,题解,个数,构造,Walk,异或,CF1722G,余数
From: https://www.cnblogs.com/hzt0/p/CF1722G.html

相关文章

  • CF351B Jeff and Furik 题解
    CF351BJeffandFurik有一个长度为n的排列p,Jeff每次操作选两个相邻元素交换,Furik每次操作随机执行下列操作之一:1.对于所有p[i]<p[i+1],随机取一对p[i]与p[i+1]交换2.......
  • onenote突然无法同步,同步报错以及创建笔记本都报错问题解决
    同步报错:OneNote当前无法同步笔记。将继续尝试。(错误代码:0x80004005bdf5j)创建笔记本报错:OneNote无法在以下位置新建笔记本打开笔记本报错:无法打开笔记本无法打开......
  • hzx的CSP-J模拟赛题解
    T1按题意模拟即可,注意不用考虑闰年。T2\(30\%\)的数据:使用\(Floyd\)求出图的全源最短路,时间复杂度\(O(n^3)\)。\(50\%\)的数据:对图上每个点使用\(Dijkstra\)求......
  • P1004 [NOIP2000 提高组] 方格取数 题解
    [NOIP2000提高组]方格取数题目描述设有\(N\timesN\)的方格图\((N\le9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字\(0\)。如下图所示(见样例):......
  • iOS自动化真机测试验证环境过程中常见问题解析
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取本章节主要讲解iOS自动化真机配置以及在iOS真机执行自动化时常见问题与解决方法。真机使......
  • LG3565 [POI2014]HOT-Hotels 题解
    P3565[POI2014]HOT-Hotels给定一棵树,在树上选\(3\)个点,要求两两距离相等,求方案数。原题数据范围\(n\leq5000\),可做到线性,空间\(62.5\text{MB}\)。sub1\(n\leq......
  • vue中render中src不生效问题解决
    在vue文件中写html代码的话可以直接用<imgsrc="xxx"/>但是在render中就不能正常工作。原理度娘上有,那render中要使用的话需要加requirerender<imgsrc={required(......
  • luoguP8085 [COCI2011-2012#4] KRIPTOGRAM 题解(KMP)
    /*给定明文和密文,密文与明文的某个字串格式相同,找出密文出现的最早位置。如:明文aaabcdabc 密文xy ans:3解:容易想到KMP算法。可以发现,密文和对应子串的格式相同......
  • 题解 AT5635 Shortest Path on a Line(线段树优化建图)
    题解AT5635ShortestPathonaLineDescription题目传送门题面翻译有一张有\(N\)个点,编号为\(1-N\)的无向图。做\(M\)次操作,每次操作给出三个正整数\(L,R,......
  • Jenkins 踩坑 | job 创建、参数化、定时构建及时区偏差问题解决
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取1)启动Jenkins后在首页点击"开始创建一个新任务"。2)输入任务名称,选择自由风格,点击“确定”。......