ARC137D Prefix Xors
首先显然每一位独立,问题变成 01 串的问题。这时如果没有思路,可以考虑找规律,然后发现
另一个直接的思路是看到多次前缀(异或)和便使用路径计数优化 DP(UER#11 切割冰片使用了此方法),那么
乍一看这个好像跟异或拉不上关系,实际上顺着想下去会发现由于异或是不进位加法,所以实际上贡献就是
结合图示可知,
#include <bits/stdc++.h>
using namespace std;
int a[2000005],ans[2000005];
int main(){
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
reverse(a+1,a+n+1);
int nn=ceil(log2(n));n=1<<nn;
reverse(a+1,a+n+1);
for(int w=1;w<n;w<<=1)
for(int i=1;i<=n;i+=w<<1)
for(int j=i;j<(i+w);j++)
a[j]^=a[j+w];
for(int i=0;i<m;i++)cout<<a[i%n+1]<<' ';
}