这里要注意一下虽然b的个数很多但实际的状态数目很少
所以一定会有重复的
然后就爆搜即可
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll ;
ll n,m;
const int N=1<<16;
int f[N];
int upda(int res)
{
int x=0;
for(int i=0;i<n;i++)
{
int j=(i-1+n)%n;
int a=res>>i&1,b=res>>j&1;
x|=(a^b)<<i;
}
return x;
}
void print(int res)
{
for(int i=0;i<n;i++)
{
cout<<(res>>i&1)<<endl;
}
}
int main()
{
cin>>n>>m;
int res=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
res|=x<<i;
}
memset(f,-1,sizeof f);
f[res]=0;
for(int i=1;;i++)
{
res=upda(res);
if(i==m)
{
print(res);
break;
}
else if(f[res]==-1)f[res]=i;
else
{
int len=i-f[res];
int x=(m-i)%len;
while(x--)res=upda(res);
print(res);
break;
}
}
return 0;
}