您的位置:首页 > 其它

hdu 5724(博弈)

2016-07-22 21:21 387 查看
#include <bits/stdc++.h>

#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;

#define LL long long
#define pii pair<int,int>
#define MP make_pair
#define ls i << 1
#define rs ls | 1
#define md (ll + rr >> 1)
#define lson ll, md, ls
#define rson md + 1, rr, rs
#define Pi acos(-1.0)
#define mod 1000000007
#define eps 1e-12
#define inf 0x3f3f3f3f
#define N 200010
#define M 1200020

int n, m, sg[M];
bool vis[25];
void init(){
sg[0] = 0;
for(int i = 1; i < (1<<20); ++i){
memset(vis, 0, sizeof vis);
bool f = 0;
for(int j = 0; j < 20; ++j){
if((i >> j & 1) == 0) continue;
int t = j;
while(t >= 0 && ((i >> t) & 1)) t--;
if(t == -1) continue;
f = 1;
int tt = i ^ (1 << j);
tt |= (1 << t);
if(sg[tt] >= 24) cout << sg[tt] << endl;
vis[sg[tt]] = 1;
}
if(!f){
sg[i] = 0;
}
else{
int j = 0;
while(vis[j]){
j++;
}
sg[i] = j;
}
}
}
int main(){
init();
int cas;
scanf("%d", &cas);
while(cas--){
scanf("%d", &n);
int ans = 0;
for(int i = 1; i <= n; ++i){
scanf("%d", &m);
int t = 0;
while(m--){
int id;
scanf("%d", &id);
t |= 1 << (20 - id);
}
ans ^= sg[t];
}
if(ans == 0)
puts("NO");
else puts("YES");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: