您的位置:首页 > 其它

Just do it

2017-10-10 17:00 127 查看

Just do it

Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)

Total Submission(s): 1420    Accepted Submission(s): 831

[align=left]Problem Description[/align]
There is a nonnegative integer sequencea1...n
of length n.
HazelFan wants to do a type of transformation called prefix-XOR, which means
a1...n
changes into b1...n,
where bi
equals to the XOR value of a1,...,ai.
He will repeat it for m
times, please tell him the final sequence.
 

[align=left]Input[/align]
The first line contains a positive integerT(1≤T≤5),
denoting the number of test cases.

For each test case:

The first line contains two positive integers n,m(1≤n≤2×105,1≤m≤109).

The second line contains n
nonnegative integers a1...n(0≤ai≤230−1).

 

[align=left]Output[/align]
For each test case:

A single line contains n
nonnegative integers, denoting the final sequence.
 

[align=left]Sample Input[/align]

2
1 1
1
3 3
1 2 3

 

[align=left]Sample Output[/align]

1
1 3 1

 

[align=left]Source[/align]
2017 Multi-University Training
Contest - Team 7
 

[align=left]Recommend[/align]
liuyiding   |   We have carefully selected several similar problems for you:  6216 6215 6214 6213 6212 

打表找规律,发现他们的系数如下:
1
1
1 1 1
1 1

2
1
2 3 4
5 6

3
1
3 6 10
15 21

4
1
4 10 20
35 56
5
1
5 15 35
70 126
..............................................
..............................................
i
.......c(m+i-2,i-1).................

发现他们的系数是杨辉三角

我们只需要系数的奇偶,c(m,n) :if((m&n)==n) 则c(m,n)是一个奇数,一个组合数的性质

代码如下:

#include<stdio.h>
#include<string.h>
const int N=2*1e5+5;
int a
,b
;
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
int mm=m+i-2,nn=i-1;
if((mm&nn)==nn)
{
for(int j=i;j<=n;j++)
{
b[j]^=a[j-i+1];
}
}
}
for(int i=1;i<=n;i++)
{
if(i==1)
printf("%d",b[i]);
else
printf(" %d",b[i]);
}
puts("");
}
r
b47b
eturn 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: