转载请注明出处,谢谢http://blog.csdn.net/bigtiao097?viewmode=contents
题意:
给长度为n
(1≤n≤2×105)
的序列a,对其做m
(1≤m≤109)
次以下操作
第m次操作后,数组第i个元素为第m-1次操作得到的数组的前i个元素的xor值
思路:
找规律题 ,,,自己写一写每个元素对最后序列的贡献,可以发现杨辉三角的影子
感觉代码的理论复杂度有点高,但是还能过!
具体代码如下:
Result:Accepted
Memory: 3232K
Time : 1248MS
#include<bits/stdc++.h>
const int maxn = 2e5+5;
using namespace std;
int n,m;
int a[maxn];
int b[maxn];
int T;
int nn;
int main()
{
scanf("%d",&T);
while(T--)
{
memset(b,0,sizeof b);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
nn = m+i-1;
if((nn&i)==i)
for(int j=i+1;j<=n;j++)
b[j]^=a[j-i];
}
for(int i=1;i<=n;i++)
printf("%d%c",b[i],i==n?'\n':' ');
}
}