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 去掉最后的所有1
while(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;
}

洛谷 [P2575] 高手过招的更多相关文章

  1. 洛谷P2575高手过招——SG函数初试

    题目:https://www.luogu.org/problemnew/show/P2575 第一次用SG函数解决问题,有许多不熟练的地方: 试图按自己的理解写一个dfs,结果错了(连题都没读对,以为 ...

  2. 洛谷P1294 高手去散步

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

  3. 题解-洛谷P1184 高手之在一起

    https://www.luogu.org/problemnew/show/P1184 (题目出处) 见到地名,自然就想到字符串了.可以从第一天开始,将她的位置与高手方便取得地方一一比较,(char字 ...

  4. 洛谷 P1184高手之在一起 题解

    题目传送门 那位高手是谁啊?@jxpxcsh  QWQ. 这道题数据特别水,所以直接使用O(n*m),每读进一个m内的字符串,就扫一遍n的字符串.但注意地点字符串中有可能会有空格,所以这时候就要请出g ...

  5. 洛谷——P1294 高手去散步

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

  6. 洛谷 P1294 高手去散步

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

  7. P2575 高手过招 题解

    题目描述 我们考虑如何把问题转换成博弈论来求解. 我们对于每一行之前都加上一个空格. 设原来这一行的空格个数是 \(C\) ,那么此时空格个数变成 \(C + 1\) . 然后按照从左到右的顺序给每一 ...

  8. Luogu P2575 高手过招

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

  9. P2575 高手过招

    传送门 直接搞好像搞不了 考虑转换模型 显然每一行棋子不会跑到其他行.. 所以可以把每一行的情况看成一个子博弈 显然整个答案就是每一行的SG值的异或和 不懂的回去学SG函数... 考虑怎么分析一行的状 ...

随机推荐

  1. swift 接水果游戏ios源码

    初学swift,写来练手的,游戏很简单 ,顾名思义就是接水果 ,菠萝不能接,接到一个水果得一分,接到菠萝扣五分,漏一个水果扣一分,初始分0分,当分数低于0分 就Game Over了,暂时适用5s的模拟 ...

  2. 强化学习_Deep Q Learning(DQN)_代码解析

    Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...

  3. Xcode编译工具

    一.关于Other Linker Flags xcode中,在“Targets”选项下有Other Linker Flags选项,在这里可以填写xcode链接器的参数,如:-ObjC.-all_loa ...

  4. 解决VS2013无法安装ArcObjects10.2的问题

    之前在网上看到的10.1在vs2012安装不上的问题,解决办法是改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\1 ...

  5. java HttpServletRequest 重复流读取

    在用reset接口的时候,常常会使用request.getInputStream()方法,但是流只能读取一次,一旦想要加上一个过滤器用来检测用户请求的数据时就会出现异常.   在过滤器中通过流读取出用 ...

  6. path.join()与path.resolve()区别

    1.path.resolve([...paths]) path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径. 给定的路径的序列是从右往左被处理的,后面每个 path 被依次 ...

  7. 【图论】hdu6370Werewolf

    有理有据的结论题 Problem Description "The Werewolves" is a popular card game among young people.In ...

  8. 【线段树】bzoj3585: mex

    非常精妙的线段树题 Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. 从第三 ...

  9. [LUOGU] P2245 星际导航

    题目描述 sideman做好了回到Gliese 星球的硬件准备,但是sideman的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有N 个顶点和M 条边的带权无向图,顶点表示各个星系, ...

  10. MySQL 资料库概论与MySQL 安装

    本文来自:https://www.breakyizhan.com/sql/5648.html 1. 储存与管理资料 储存与管理资料一直是资讯应用上最基本.也是最常见的技术.在还没有使用电脑来管理你的资 ...