HDU 6129

来源:互联网 发布:天津基础网络教研平台 编辑:程序博客网 时间:2024/05/22 03:07

dp[i][j]表示第j轮第i个数,dp[i][j]=dp[i-1][j]^dp[i][j-1],推两次,变成dp[i-2][j]^dp[i][j-2],再推两次,可以发现为dp[i-2^k][j]^dp[i][j-2^k]

#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define PI acos(-1.0)typedef long long ll;const int maxn=2e5+10;int a[maxn];int main(){    int t;    cin >> t;    while(t--)    {        int n,m;        scanf("%d%d",&n,&m);        for(int i=0;i<n;i++)            scanf("%d",a+i);        for(int k=0;(1<<k)<=m;k++)        {            if(m>>k&1)            {                for(int i=(1<<k);i<n;i++)                {                    a[i]^=a[i-(1<<k)];                }            }        }        for(int i=0;i<n;i++)        {            printf("%d%c",a[i]," \n"[i==n-1]);        }    }    return 0;}


原创粉丝点击