bzoj1411

来源:互联网 发布:软件下载官方网站排行 编辑:程序博客网 时间:2024/06/05 14:40

这种规律题一般和二进制有关所以是考虑2^k的关系,然后注意到分奇偶考虑更简单

但是我怎么都过不了,一直re不知为何。。

错误代码:待填坑:

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n;long long t;int a[2][220000];int c(long long kk){return (kk%(2*n)+ (2*n)) % (2*n);}void change(long long t,long long temp,int &kind){if (t == 0)return;for (int i = 0; i < 2*n; i += 2){int left = c(i - temp); int right = c(i + temp);a[kind^1][i] = a[kind][left] ^ a[kind][right];}t -= temp; temp <<= 1;while (t%temp != 0){temp <<= 1;}kind ^= 1;change( t, temp,kind);}//1152921504606846975int main(){//cout << (2 & (-2)) << endl;scanf("%d%lld", &n, &t);for (int i = 0; i < 2 * n; i++){if (i % 2 == 0)a[0][i] = rand() % 2;//scanf("%d", &a[0][i]);a[0][i]--; a[1][i]--;}int kkk = 0;if (t % 2){t--;change( t, t&(-t),kkk);for (int i = 1; i <2*n; i += 2)a[kkk^1][i] = a[kkk][c(i - 1)] ^ a[kkk][c(i + 1)];for (int i = 0; i <2*n; i += 2)a[kkk^1][i] = -1;kkk ^= 1;}elsechange( t, t&(-t),kkk);for (int i = 0; i <2*n; i++){if (i != 2 * n - 1)printf("%d ", a[kkk][i] + 1);elseprintf("%d", a[kkk][i] + 1);}printf("\n");return 0;}

原创粉丝点击