链接 题意 给定数组, 每次操作先将数组排序, 再将奇数位全部异或x, 求k次操作后数组最大值与最小值 (1 ≤ n ≤ 105, 0 ≤ k ≤ 105, 0 ≤ x ≤ 103) 题解 直接暴力模拟是O(nk)的, 注意到元素范围均较小可以用桶达到O(1024*k) 该题k过大时会好像一定出现循环, 然后暴力模拟几次也能过, 没看出来怎么证明... #include <iostream>#include <cstdio> #include <algorithm> #…
地址:http://codeforces.com/contest/768/problem/C 题目: C. Jon Snow and his Favourite Number time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Jon Snow now has to fight with White Walkers. He has…
C. Jon Snow and his Favourite Number time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Jon Snow now has to fight with White Walkers. He has n rangers, each of which has his own strength. Als…
[题目链接]:http://codeforces.com/contest/768/problem/C [题意] 给你n个数字; 让你每次把这n个数字排序; 然后对奇数位的数字进行异或操作,然后对新生成的序列再重复上述操作总共k次; 问最后的序列的最小值和最大值分别是多少; [题解] 可以用计数排序来搞; 因为数字最大为1000; 所以将近O(K*1000)的复杂度; 完全可以的; 每次从小到大(0到1000(枚举数字; 然后根据该数字的个数判断该数字有几个数字要进行异或,几个数字保持原样. 然后…
题意: 给出一个数列,和一种操作,以及两个数x和k. 这个操作有两个步骤: 首先把这个数列按照升序排序,然后把所有奇数位上的数字与x异或. 问执行k次操作之后,这个数列的最大值和最小值是多少. 思路: 由于每个数字异或两次之后会变回本身,所以猜测这个数列有可能会循环,所以就可以暴力计算周期,对于每一次出现的数列,看看是否与前面某次出现过的数列相同,这是暴力的思路.玄学复杂度. 更优雅的思路: 发现a[i]的最大值为1000,任意1000以内的两个数字异或不会超过1023,所以可以统计0到1023…
https://vjudge.net/problem/CodeForces-768C 题意:n个数,k次操作,x.每次操作先排序,再让奇数位置上的数据a[i]:=a[i] XOR x;   k<1e5,x<1e5,a[i]<1e3. 题解:由于每个数据为1~1000,且每次操作先排序,所以可以用桶排序维护所有数据.然后模拟操作(我自己模拟的一直wa,换了另一种才ac). 网上另外也有人k%=64 然后暴力ac了,还有找循环节的也ac 了. 坑:第一次看codeforce 的数据,结果ou…
题目链接:http://codeforces.com/contest/768/problem/C 题意:给出n个数,k个操作,和一个x,每次操作先排序然后对奇数位数进行xor x操作,最后问k次操作后最大值和最小值 为多少. 题解:看似是要找规律的但是只要暴力就行了.主要是a[i]的范围就只有10的3次,而且时间还有4s,直接来一个vis[i]表示 0-2048个数内取了几个,这样排序都不用了.直接for 0-2048就行.(2的10次1024,异或2的9次就是,2的11次减1 所以设最大为20…
发现值域很小,而且怎么异或都不会超过1023……然后可以使用类似基数排序的思想,每次扫一遍就行了. 复杂度O(k*1024). #include<cstdio> #include<cstring> using namespace std; int n,k,x,cnts[1110],tmpcnts[1110]; int main() { // freopen("c.in","r",stdin); int X; scanf("%d%d%…
http://codeforces.com/contest/768/problem/C 这题的数值大小只有1000,那么可以联想到,用数值做数组的下标,就是类似于计数排序那样子.. 这样就可以枚举k次操作,然后for (int i = 0; i <= 1025; ++i),也就是O(1000 * k)的复杂度而已. 0--1000中任选两个数异或,最大值是1023 然后注意下只有奇数位异或,dp[now][val]计数转移下去就好了 #include <cstdio> #include…
CodeForces - 617E 给n个数, m个询问, 每次询问问你[l, r]区间内有多少对(i, j), 使得a[i]^a[i+1]^......^a[j]结果为k.(注意 i ! =  j)维护一个前缀异或值就可以了.要注意的是 区间[l, r], 我们需要将pre[l-1]......pre[r]都加进去, pre[l-1]不能少. #include<bits/stdc++.h> using namespace std; #define maxn 1234567 #define l…