SG函数+状压记忆化搜索

观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好

每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验

注意SG值要预处理出来,不能每次算
(WA的原因是 a数组在递归的过程中没有被清空,而是直接覆盖了,如果动态开数组就没有这样的问题)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAXN = 1100005;
int init() {int rv = 0, fh = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') fh = -1;c = getchar();}while(c >= '0' && c <= '9') {rv = (rv<<1) + (rv<<3) + c - '0';c = getchar();}return fh * rv;
}
int T, n, SG[MAXN], a[30];
int lowbit(int x) {return x & (-x);//与树状数组中相同,取一个二进制数最右边的1
}
int SG_search(int cur) {if(SG[cur] != -1) return SG[cur];int t = cur + 1 - lowbit(cur + 1), k = lowbit(t), cnt = 0, tmp;//t 是 cur 去掉最后的所有1while(k) {t ^= k;tmp = k;for( ; (cur ^ k) < cur ; k >>= 1) ;a[cnt++] = SG_search(cur ^ k ^ tmp);k = lowbit(t);}sort(a, a + cnt);if(a[0]) return SG[cur] = 0;for(int i = 1 ; i < cnt ; i++) {if(a[i] - a[i - 1] > 1) return SG[cur] = a[i - 1] + 1;}return SG[cur] = a[cnt - 1] + 1;
}
int main() {freopen("in.txt", "r", stdin);T = init();memset(SG, -1, sizeof(SG));int a = 0;for(int i = 0 ; i < 20 ; i++) {a |= (1<<i);SG[a] = 0;}for(int i = 1 ; i <= (1<<20) ; i++) {if(SG[i] == -1) SG_search(i);}while(T--) {n = init();int ans = 0;for(int i = 1 ; i <= n ; i++) {int t = init();int temp = 0;for(int j = 1 ; j <= t ; j++) {int k = init();temp = temp | (1 << (20 - k));}ans ^= SG[temp];}if(ans) printf("YES\n");else printf("NO\n");}fclose(stdin);return 0;
}

转载于:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8479531.html

洛谷 [P2575] 高手过招相关推荐

  1. 洛谷 P2575 高手过招

    题目描述 AKN玩游戏玩累了,于是他开始和同伴下棋了,玩的是跳棋!对手是wwx!这两位上古神遇在一起下棋,使得棋局变得玄幻莫测,高手过招,必有一赢,他们都将用最佳策略下棋,现在给你一个n*20的棋盘, ...

  2. 洛谷P2575 高手过招

    题目 题意: n*20的棋盘中有一些棋子,两人每次移动一个棋子,若该棋子右边有空位,就向右跳到第一个空格,若没有,则不能移动.若所有棋子都不能移动,就算输.问先手能不能胜 题解: 我们将一行棋盘看成一 ...

  3. P2575 高手过招

    P2575 高手过招 题意: AKN玩游戏玩累了,于是他开始和同伴下棋了,玩的是跳棋!对手是wwx!这两位上古神遇在一起下棋,使得棋局变得玄幻莫测,高手过招,必有一赢,他们都将用最佳策略下棋,现在给你 ...

  4. 洛谷 P1294 高手去散步

    P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思."即使是单相思,也是完整的爱情",高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到 ...

  5. 洛谷 P1294 高手去散步-邻接矩阵+dfs-求无向图的一条最长路径

    输入: 4 6 1 2 10 2 3 20 3 4 30 4 1 40 1 3 50 2 4 60 输出: 150 邻接矩阵: 代码如下: #include <iostream> usin ...

  6. 洛谷P1294 高手去散步

    图的dfs,第一次dfs图,特此记录 代码 #include <bits/stdc++.h> using namespace std; int G[100][100],bk[100],an ...

  7. P2575 高手过招 (博弈、sg函数)

    题目链接 题面: 题解: 用sg函数把所有的状态打出来就好啦. 代码: #include<iostream> #include<cstdio> #include<cstr ...

  8. P2575 高手过招(博弈)

    题目大意: 有一个n*20的棋盘,上面有若干棋子 对于一个棋子,能将它向右移动一格,如果右边有棋子,则向右跳到第一个空格,如果右边没有空格,则不能移动这个棋子,如果所有棋子都不能移动,那么将输掉这场比 ...

  9. Luogu P2575 高手过招

    题目链接 \(Click\) \(Here\) 关键在于转换成阶梯\(Nim\)的模型.最开始把题目看错了,理解正确后发现棋子可以向后跳不止一位,那么就比较简单了. 这里把空格看做阶梯,棋子看做硬币, ...

最新文章

  1. python 去除str的引号 去除括号_Python基础教程:运算符以及数据类型解析
  2. 首个64层3D NAND闪存技术出现
  3. Master/Slave知识
  4. Time to First Byte(TTFB)与Web性能优化
  5. S/4HANA业务角色概览之订单到收款篇
  6. Spring 3 RESTful Web服务
  7. PyPyODBC 0.9.2发布 - 纯Python实现的pyodbc替代库
  8. 2018.09.19python学习第七天part1
  9. 使用TensorFlow.js进行人脸触摸检测第1部分:将实时网络摄像头数据与深度学习配合使用
  10. bzoj 4950: [Wf2017]Mission Improbable(二分匹配)
  11. [转载] Python 字典(Dictionary) get()方法
  12. react 子组件向父组件传值
  13. 我没有时间 I Don't Have Time?
  14. 《编程回忆录》之 Unity3D 视频教程
  15. 苹果mp3软件_【APP】coolhear 3D:安卓+苹果
  16. cmd命令窗口快捷键与小技巧
  17. Python制作卡点视频
  18. 利用jdk使用WebService
  19. 盛华软件工作室 -开张了
  20. linux设置共享文件夹和删除共享文件夹(vmware:linux-windows共享文件夹)

热门文章

  1. megacli在线raid构建详解
  2. TestLink报错之:TestLink:::致命错误
  3. 在word中插入代码块
  4. Ubuntu 立即更新网卡配置,重启网卡
  5. 如何让div盒子或文字居中显示
  6. jeecg-boot字典翻译改造(支持实体类详情查询自动翻译)
  7. Mac Intellij Idea 代码自动提示快捷键
  8. 树莓派开机要按enter键问题
  9. 广州女大学生价值观调查:近六成愿嫁“富二代”
  10. 如何在$PATH中添加目录(/usr/local/bin)