洛谷2575高手過招
阿新 • • 發佈:2018-05-25
sca 模板 amp oid n) ems targe void std
題目:https://www.luogu.org/problemnew/show/P2575
略微理解一下題意。
稍稍狀壓的SG模板。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int T,n,sg[(1<<20)+5],xnt; void dfs(int cur) { if(sg[cur]!=-1)return; int sum=0; for(int i=1;i<20;i++) if((1<<i)&cur) {if(((1<<(i-1))&cur)==0) { int k=cur-(1<<i)+(1<<(i-1)); dfs(k);sum|=(1<<sg[k]); } else { for(int j=i-1;j>=0;j--) if(((1<<j)&cur)==0) {int k=cur-(1<<i)+(1<<j); dfs(k);sum|=(1<<sg[k]); break; } } } for(int i=0;i<20;i++) if(!((1<<i)&sum)) { sg[cur]=i;return; } } void init() { memset(sg,-1,sizeof sg); for(int i=0;i<20;i++) sg[(1<<i)-1]=0; } int main() { init(); scanf("%d",&T); while(T--) { scanf("%d",&n);int m,sum=0; for(int i=1;i<=n;i++) { scanf("%d",&m);int nw=0,k; for(int j=1;j<=m;j++) { scanf("%d",&k);k=20-k+1; nw|=(1<<(k-1)); } dfs(nw); sum^=sg[nw]; } if(sum)printf("YES\n"); else printf("NO\n"); } return 0; }
洛谷2575高手過招