P2575 高手过招

题目描述

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

游戏规则是这样的:

对于一个棋子,能将它向右移动一格,如果右边有棋子,则向右跳到第一个空格,如果右边没有空格,则不能移动这个棋子,如果所有棋子都不能移动,那么将输掉这场比赛。

输入格式

第一行一个T,表示T组数据

每组数据第一行n,表示n*20的棋盘

接下来n行每行第一个数m表示第i行有m个棋子

随后跟着m个数pj表示第i行的棋子布局

输出格式

如果AKN能赢,则输出”YES”,否则输出”NO”

输入输出样例

输入 #1

2
1
2 19 20
2
1 19
1 18

输出 #1

NO
YES

说明/提示

10%的数据T≤1,n≤1

另外10%的数据m≤1

100%的数据T≤100,n≤1000,m≤20,1≤pj≤20

By:Mul2016

思路

考虑阶梯Nim,每次可以把一个石堆的任意个棋子移到下一级阶梯。

那么显然就是奇数层的SG异或起来

因为偶数层的操作后手可以做对称的操作

那么考虑这题,发现棋子间会互相影响,不好表示,所有自然而然的可以想到转换模型,发现空格的个数是不会变的,可以看作阶梯Nim。

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=50,M=1010;

int SG[N],f[M];
int n,t,ans,len;
int a[N],cnt[N];
int flag,top,tot;

int main () {
	scanf("%d",&t);
	while(t--) {
		ans=0;
		scanf("%d",&n);
		for(int i=1; i<=n; i++) {
			memset(cnt,0,sizeof(cnt));
			scanf("%d",&len);
			for(int j=1; j<=len; j++) {
				scanf("%d",&a[j]);
				cnt[a[j]]++;
			}
			tot=0,top=20,flag=0;
			while(cnt[top])
				top--;
			for(; top; --top)
				if(!cnt[top]) {
					ans^=(flag?tot:0);
					flag^=1;
					tot=0;
				} else
					tot++;
			ans^=(flag?tot:0);
		}
		if(ans)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

原文地址:https://www.cnblogs.com/mysh/p/11333637.html

时间: 2024-10-09 11:53:15

P2575 高手过招的相关文章

洛谷 [P2575] 高手过招

SG函数+状压记忆化搜索 观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好 每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验 注意SG值要预处理出来,不能每次算 (But Why???) #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> #include <cstring> using nam

Steam水土不服,腾讯网易PK高手过招谁能取胜?

9月1日,腾讯新版Wegame游戏平台客户端正式上线,一时间引发热议,毁誉参半.Wegame的出现,把人们的目光吸引到了游戏平台.一直以来,国内的游戏大都属于独立运营,为数不多的游戏平台也是以休闲小游戏为主,重度游戏.尤其是全球性的重度游戏几乎没有.而国外早已出现Steam.Origin这样,不仅游戏类型多样,而且集游戏商城与互动社区为一体,功能强大的全品类游戏平台. Wegame的上线表明,国内互联网巨头已经开始瞄准游戏平台这一尚在起步且有着广阔发展前景的市场.据悉,网易游戏也在紧锣密鼓地研发

Luogu 2575 高手过招-SG函数

Solution SG函数跑一遍就过了ouo Code 1 #include<cstring> 2 #include<cstdio> 3 #include<algorithm> 4 #define rd read() 5 #define cl(a) memset(a, 0, sizeof(a)); 6 using namespace std; 7 8 const int N = 1 << 21; 9 10 int SG[N], S[500]; 11 int

LuoguP2575 高手过招(博弈论)

空格数变吗?不变呀 阶梯博弈阶梯数变吗?不变呀 那这不就阶梯博弈,每行一栋楼,爬完\(mex\)就可以了吗? #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++a) #define nR(a,b

某大佬的TODOLIST

回文串 manacher(完成时间:2018.12.10)回文串计数最长双回文串(完成时间:2018.12.10) 扫描线 棋盘制作巨大的牛棚玉蟾宫某个blog 汉诺塔相关 新汉诺塔SHOI 博弈论 blog1blog2P2197 [模板]nim游戏(完成时间:2018.12.07)P2599 [ZJOI2009]取石子游戏P2575 高手过招 AC自动机 P3808 [模板]AC自动机(简单版)(完成时间:2018.12.06)P3796 [模板]AC自动机(加强版)(完成时间:2018.12

学术会议高手速成之七种武器

学术江湖,虽无刀光剑影,却有血雨腥风.博士路上,漫漫修远,切磋技艺印证武功街头火拼胡同拍砖,大小战役,不可计数.一年数度之大型学术会议,更是群雄争锋之处华山论剑之时.回首五年江湖,西窗残阳似血,不胜唏嘘.暗观镜中博士帽上缨穗,犹感血迹斑斓,森然欲滴.遂决意退隐江湖葬剑青山,立志面朝大海春暖花开,再不过问学术界的是非恩怨.此五年心智武功,尽录于此,拳拳之心,皆为君故,诸位好生研习修炼,笑傲江湖之日,长歌烈酒,勿忘相邀.  第一种武器 长生剑 如果你想要一种最安全的武器闯荡江湖,你需要的是一把剑.连

【6.24-北京】AppCan移动开发者大会:最新议程曝光

6.24,首届AppCan移动开发者大会将在北京国际会议中心召开. 大会以"平台之上,应用无限"为主题,旨在探讨在"互联网+双创"的大潮下,通过移动互联网技术.思维.模式,帮助开发者/创业者实现创新创业.技术变现,最终动移动商业模式创新和区域双创落地. 最新议程曝光 鲜活.劲爆.落地,有高大上的趋势讲解.有重磅新品发布.有草根开发者讲述创业经历.有APP展示评选,有区域政府双创落地对话.有CTO技术大咖高手过招,有投资人真情告白--一天时间,深入了解移动技术的前世今

【春节新区脸谱】邹晓燕:出门即是最美的风景o

"有权必有责.用权必担责.滥权必追责,这是我们党加强制度建设.加强权力监督制约的必然要求.强化监督问责不是一个泛化的口号,是实实在在的要求,关键要落到实处."汪玉凯说,各地各部门要抓好问责条例的执行,抓紧制定具体实施办法和配套措施,推动问责常态化. 这一见便是一生. "我觉得也有高手过招,互相出题的意思吧!"王巍笑道.http://imgur.com/a/lmsv2http://imgur.com/a/IxWdlhttp://imgur.com/a/Qn3Vuhtt

校园到职场,正益移动助力90后就业创业

外界对于90后的关注从没减少.几年前,90后大多被贴着自私.叛逆.独行等标签,但如今人们看到的,更多的是他们身上有想法.敢创新.能担当的一面,相比于从事公务员等稳定的工作,他们更愿意迎接挑战,自己创业.他们身上有着天然的互联网基因和思维,其中移动互联网也成为90后创业的首选. 在近日召开的AppCan移动开发者大会上,我们就看到了不少90后大学生的身影,别看他们一脸的稚气,其实很多已经是APP开发的高手了,有不少还参加过AppCan的移动开发培训.也有很多在老师带领下,早早赶来的学生,比如北京北