P2575 高手过招 题解
我们考虑如何把问题转换成博弈论来求解。
我们对于每一行之前都加上一个空格。
设原来这一行的空格个数是 \(C\) ,那么此时空格个数变成 \(C + 1\) 。
然后按照从左到右的顺序给每一个空格标号。
接着构建出一个数组 \(p_i\) 。
\(p_i\) 表示从第 \(i\) 个空格开始后面有多少个连续的棋子。
比如像这样的一行棋盘:
\]
我们先在前面加上一个空格
\]
不难发现,此时我们的 \(p\) 数组是这样的:
\]
我们可以发现如果我们移动第 \(2\) 个棋子会变成这样。
p = \{0,0,1,0,0,3,1,1\}
\]
同理,我们可以发现所有的操作都可以把转换成 \(p\) 上的操作。
我们尝试着把 \(p_i\) 当作是第 \(i\) 个阶梯上的石子个数。
题目上的限制是移到右边最近的一个空格上。
让后通过模拟 \(2\sim 4\) 的棋子(再次不在给出结果)可以发现相当于是指定棋子向上一层移动。
(当然,最多只会向上一层移动,可以证明不会影响到其他的地方)
当所有的棋子变成这样时就结束了
\]
同理,也可以对应到所有的石子被移到最高层。
所以就是个 阶梯 \(\textbf{Nim}\) 。
Code
#include <bits/stdc++.h>
#define file(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)
#define quad putchar(' ')
#define Enter putchar('\n')
const int N = 30;
int T, n, ans2, a[N], ans1;
signed main(void) {
// file("P2575");
std::cin >> T;
for (int test = 1; test <= T; test ++) {
std::cin >> n;
ans2 = 0;
for (int i = 1, m; i <= n; i++) {
scanf("%d", &m);
memset(a, 0, sizeof(a)); ans1 = 0;
int cnt = 20 - m + 1;
for (int i = 1, pos; i <= m; i++) {
scanf("%d", &pos);
a[pos] = 1;
}
int tot = 0;
for (int i = 1; i <= 20; i++) {
if (a[i] == 0) {
cnt --;
if (cnt % 2 == 1)
ans1 ^= tot;
tot = 0;
} else tot ++;
}
ans2 ^= ans1;
}
if (ans2 == 0) std::cout << "NO" << std::endl;
else std::cout << "YES" << std::endl;
}
}
P2575 高手过招 题解的更多相关文章
- 洛谷P2575高手过招——SG函数初试
题目:https://www.luogu.org/problemnew/show/P2575 第一次用SG函数解决问题,有许多不熟练的地方: 试图按自己的理解写一个dfs,结果错了(连题都没读对,以为 ...
- Luogu P2575 高手过招
题目链接 \(Click\) \(Here\) 关键在于转换成阶梯\(Nim\)的模型.最开始把题目看错了,理解正确后发现棋子可以向后跳不止一位,那么就比较简单了. 这里把空格看做阶梯,棋子看做硬币, ...
- P2575 高手过招
传送门 直接搞好像搞不了 考虑转换模型 显然每一行棋子不会跑到其他行.. 所以可以把每一行的情况看成一个子博弈 显然整个答案就是每一行的SG值的异或和 不懂的回去学SG函数... 考虑怎么分析一行的状 ...
- 洛谷 [P2575] 高手过招
SG函数+状压记忆化搜索 观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好 每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验 注意SG值要预处理出来, ...
- 洛谷$P$2575 高手过招 博弈论
正解:博弈论 解题报告: 传送门! 阿西$gql$又双叒被题意杀辣,,,再不好好学语文吃枣药丸$TT$ 然后在$get$规则之后还有什么问题嘛,,, 就和这题差不多了,一个$easy$的阶梯问题罢辽, ...
- Luogu 2575 高手过招-SG函数
Solution SG函数跑一遍就过了ouo Code #include<cstring> #include<cstdio> #include<algorithm> ...
- LuoguP2575 高手过招(博弈论)
空格数变吗?不变呀 阶梯博弈阶梯数变吗?不变呀 那这不就阶梯博弈,每行一栋楼,爬完\(mex\)就可以了吗? #include <iostream> #include <cstdio ...
- 2018.12-2019.1 TO-DO LIST
AC自动机 P3808 [模板]AC自动机(简单版)(完成时间:2018.12.06) P3796 [模板]AC自动机(加强版)(完成时间:2018.12.06) P2444 [POI2000]病毒( ...
- 某大佬的TODOLIST
回文串 manacher(完成时间:2018.12.10)回文串计数最长双回文串(完成时间:2018.12.10) 扫描线 棋盘制作巨大的牛棚玉蟾宫某个blog 汉诺塔相关 新汉诺塔SHOI 博弈论 ...
随机推荐
- 如何离线安装posh-git
不用上github 1.下载post-git离线安装包 地址:https://files.cnblogs.com/files/xcr1234/posh-git-master.zip 2,用Powers ...
- HttpRunner的PB序列化工具类解决方案(python3)
背景 年初的时候团队内落地了HttpRunner3框架,简单介绍下:HttpRunner 是一款由python开发的面向 HTTP(S) 协议的开源通用测试框架,用例脚本为 YAML/JSON 格式, ...
- 1. charles安装配置与抓包详解
Charles简介Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发 ...
- Hyperledger Fabric 通道配置文件和容器环境变量详解
摘要 Fabric 网络启动的过程中需要进行大量配置,新学时对各个配置的作用一无所知,这导致我曾在网络出问题时先对配置文件的内容进行排列组合后再祈祷它能在某个时刻顺利运行,因此掌握 fabric 各个 ...
- python代码统计核酸检测结果截图
#QQ:502440275@qq.com#本截图适合安康码截图,如需其他地区截图统计,可与我QQ或QQ邮箱联系#1.在当前文件夹下创建imgs文件夹用于存放图片,图片格式.jpg#2.在当前文件夹下创 ...
- 漏洞复现:MS12-020 远程桌面协议RDP远程代码执行漏洞
漏洞复现:MS12-020 远程桌面协议RDP远程代码执行漏洞 攻击机:Kali2019 靶机:Win7 64位 解题步骤: 1.打开Kali2019和Win7 64位 ,确定IP地址是多少 2.确定 ...
- stm32F103RCT6的DMA使用经历
DMA可以直接传输数据,减少了CPU的负担,是个很好的功能,但是用的时候难免会一头雾水.这次做个小小的串口收发程序就碰到了许多问题. 之前没有注意,选择了DMA的circular模式,然后奇怪的事 ...
- python二分法、牛顿法求根
二分法求根 思路:对于一个连续函数,左值f(a)*右值f(b)如果<0,那么在这个区间内[a,b]必存在一个c使得f(c)=0 那么思路便是取中间点,分成两段区间,然后对这两段区间分别再比较,跳 ...
- JavaScript与函数式编程
JavaScript与函数式编程 绝大多数编程语言都会有函数的概念(或者说所有的?我不太确定),他们都可以做出类似的操作: function(x) { return x * x } 但是Javascr ...
- Vagrant之CentOS
Vagrant之CentOS Vagrant官网 https://www.vagrantup.com https://app.vagrantup.com/boxes/search https://ap ...