BJシミュレーションと【ご拒否】



Bj Simulation Rejection



タイトル説明:

画像

問題解決のアイデア:

画像



#include using namespace std int getint() int i=0,f=1char c for(c=getchar()c!='-'&&(c<'0' const int N=51,mx=(1<<13)-1,mod=1e9+7 int n,a[N],f[2][1<<13][1<<13] inline void add(int &x,int y){x=x+y>=mod?x+y-mod:x+y} inline void dec(int &x,int y){x=x-y>=0?x-y:x-y+mod} int main() { //freopen('lx.in','r',stdin) //freopen('lx.out','w',stdout) n=getint() for(int i=1i<=ni++)a[i]=getint()^mx int now=0f[now][0][0]=1 for(int i=0i1) for(int s1=0s1<=mxs1++) for(int s2=s1s2=(s2-1)&s1) { if(!f[now][s1][s2]) { if(!s2)break continue } add(f[now^1][s1][s2],f[now][s1][s2]) add(f[now^1][s1|a[i+1]][s2^(s2&a[i+1])],f[now][s1][s2]) dec(f[now^1][s1|a[i+1]][(s2^(s2&a[i+1]))|(a[i+1]^(a[i+1]&s1))],f[now][s1][s2]) f[now][s1][s2]=0 if(!s2)break } cout<0]<<' ' return 0 }