hdu 6129 Just do it(递推)

来源:互联网 发布:cpu温度检测软件 编辑:程序博客网 时间:2024/04/30 17:17

Just do it

Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 155    Accepted Submission(s): 79


Problem Description
There is a nonnegative integer sequence a1...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.
 

Input
The first line contains a positive integer T(1T5), denoting the number of test cases.
For each test case:
The first line contains two positive integers n,m(1n2×105,1m109).
The second line contains n nonnegative integers a1...n(0ai2301).
 

Output
For each test case:
A single line contains n nonnegative integers, denoting the final sequence.
 

Sample Input
21 113 31 2 3
 

Sample Output
11 3 1

把每次变换的系数记录下来后可以发现是个杨辉三角,就拿第一个数字在每次变换后对后面的异或次数举例

1 0 0 0 0

1 1 1 1 1

1 2 3 4 5

1 3 6 10 15

斜着看,可以发现这是个杨辉三角 第x次变换第y项是C(x+y-2,y-1);这是第一个数在第x次变换后对第y项的异或次数,后面的数可以依次类比

因为是杨辉三角,所以第一个数对第2个数如果是奇数次异或,那么第二个数对第三个数也是奇数次异或,后面的情况同理

利用 C(n,m),如果n&m==m则C(n,m)来快速判断奇偶异或次数

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <map>#include <queue>using namespace std;typedef long long ll;const int N = 2e6+10, inf = 0x3f3f3f3f;int a[N], b[N];int main(){    int t;    scanf("%d", &t);    while(t--)    {        int n, m;        scanf("%d %d", &n, &m);        memset(b,0,sizeof(b));        for(int i=1; i<=n; i++)        {            scanf("%d", &a[i]);            //b[i]=a[i];        }        for(int i=1;i<=n;i++)        {            int nn=m+i-2,mm=i-1;            if((nn&mm)==mm)            {                for(int j=i;j<=n;j++)  b[j]^=a[j-i+1];            }        }        for(int i=1;i<=n;i++) printf("%d%c",b[i],i==n?'\n':' ');    }    return 0;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 卧室正对厕所门怎么办 大门对着厕所门怎么办 大门正对厕所墙怎么办 两家住户门对门怎么办 主门对着卫生间怎么办 8岁门牙摔断了怎么办 小孩的门牙断了怎么办 孩子牙齿摔断了怎么办 门牙撞掉了一半怎么办 门牙从根断了了怎么办 牙竖着断了一半怎么办 大门牙掉了一块怎么办 牙从牙根处坏了怎么办 前门牙牙根断了怎么办 牙齿从牙根断了怎么办 门牙坏了一个洞怎么办 35岁门牙牙缝大怎么办 花从根部断了怎么办 宝宝乳牙摔断了怎么办 门牙掉了半颗怎么办 小孩牙齿撞松了怎么办 4岁宝宝牙摔松了怎么办 大人牙齿摔松了怎么办 宝宝牙齿撞松了怎么办 宝宝牙齿摔裂了怎么办 当门牙断了一半怎么办 门牙只剩牙根了怎么办 宝宝门牙磕断了怎么办 大门牙断了一点怎么办 一边脸大一边脸小怎么办 脸一面大一面小怎么办 右脸比左脸大怎么办 门牙内长了牙齿怎么办 门牙有缝怎么办矫正要多少钱 门牙磕了一小块怎么办 厕所门正对客厅怎么办 餐桌对着厕所门怎么办 厕所门对着客厅怎么办 卧室门对卧室门怎么办 新买的包有压痕怎么办 进门对着厨房门怎么办