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; }
相关文章推荐
- 栈(数组实现)
- [置顶] 求解单源最短路径:Dijkstara算法典型示例
- Byte[] to InputStream or OutputStream
- Samy XSS Worm 分析
- GUI为什么不设计为多线程(用户事件和底层事件的流程是相反的,每层都加锁效率太低,共用一把锁那就是单线程)
- Pku oj 1905 Expanding Rods(简单几何加二分)
- HDOJ 2041 超级楼梯
- Android 拖动条(SeekBar)实例 附完整demo项目代码
- 合格程序员的基本素质
- UVALive 2911 Maximum
- hdoj 1009 FatMouse' Trade
- excel的导入导出
- codeforces 691E Xor-sequences(矩阵快速幂)
- 【POJ 2533】Longest Ordered Subsequence(最长上升子序列LIS)
- java外挂
- git on server(ssh)深入剖析,github提供服务原理
- unity3d 第十一天
- (多校第二场1001)HDU5734 Acperience
- 关于float与清除浮动
- 很少有人会告诉你的Android开发基本常识