+1学姐玩跳棋 (SG函数)
+1学姐玩跳棋
Description
拥有复读机buff的+1学姐一路顺利,现在已经来到了最后一个关卡——跳棋大作战,该关卡有三个BOSS,分别是Gevjon,Tyr和Hoder。
战斗规则是,在1*n的棋盘上,从左到右依次标号为1,2,3……n-1,n。跳棋起初放在最左端,即位置1上。+1学姐和BOSS轮流进行一次操作,以一定的规则向右挪动棋子,将棋子恰好挪到最右端,即位置n上的人获胜。不能向左移动,只能在棋盘上移动,不能超出位置n。如果轮到某人移动棋子,但是棋子无法移动,则此人失败,对方获胜。
下面介绍移动规则,三场战斗移动规则不同:
Gevjon:两人轮流将棋子往右移动a格,即如果跳棋的当前位置为i,则这步操作可以将跳棋移至i+a;
Tyr:两人轮流将棋子往右移动1格或b格,即如果跳棋的当前位置为i,则这步操作可以将跳棋移至i+1或i+b;
Hoder:两人轮流将棋子往右移动c格或d格,即如果跳棋的当前位置为i,则这步操作可以将跳棋移至i+c或i+d;
假设+1学姐和三个BOSS都选择了最优策略。
由于BOSS不能主动攻击,所以每一个关卡都是+1学姐先手。
三场战斗独立进行,即这三场战斗跳棋起初都放在位置1上。
三场战斗使用的棋盘大小可能不同,即n可能不同。
现在给出n1,n2,n3,a,b,c,d(n1,n2,n3即三场棋盘的大小,a,b,c,d如上所述),请判断+1学姐能否通关。三个BOSS都被打败才算通关。
Input
第1行:一个数T,表示有T组样例。(1 <= T <= 10)
第2 - T + 1行:每行7个数n1,n2,n3,a,b,c,d。(1 <= n1,n2 <= 10^9,1<=n3<=1000,1<a,b<=10^9,1<=c,d<=1000)
Output
共T行,如果+1学姐能通关输出“YES”,否则输出“NO”。
Sample Input 1
3
7 11 15 2 6 3 5
7 10 15 2 6 3 5
6 11 18 2 6 3 5
Sample Output 1
YES
NO
NO
Hint
Sample1 解释
第一组样例,+1学姐可以打败所有BOSS,所以输出“YES”。
第二组样例,+1学姐可以打败第一个BOSS Gevjon和第三个BOSS Hoder,但是不能打败第二个BOSS Tyr,所以输出“NO”。
第三组样例,+1学姐可以打败第二个BOSS,不能打败第一个和第三个BOSS,所以输出“NO”。
思路:
第一场:可以看做有n1-1颗石子,每次拿a颗,如果拿奇数次能拿完(或者不能再拿了),那么先手必胜,否则必败
第二场:打表找规律
如果 b 是奇数的话,只需要判断 n2 的奇偶性,n2 为偶数则必胜;
如果 b 是偶数,则 n2 每 b + 1 会出现 0101010 .......... 101011 的循环,所以只需要先将 n2%(b + 1),再判断奇偶性,若为偶数则必胜。
第三场:打表找规律
n3-1每c+d会出现c个0,d个1的循环,所以(n3-1)%(c+d)<c的话就是必败态。
组合游戏不会推就直接sg函数打表找规律吧(打表代码见最下面)
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){int T,n1,n2,n3,a,b,c,d,k;scanf("%d",&T);while(T--){scanf("%d%d%d%d%d%d%d",&n1,&n2,&n3,&a,&b,&c,&d);bool flag1=false,flag2=false,flag3=false;//1k=(n1-1)/a;if(k&1) flag1=true; //2if((b&1)&&n2%2==0) flag2=true; if(b%2==0&&(n2%(1+b))%2==0) flag2=true;//3if(c>d) swap(c,d);k=(n3-1)%(c+d);if(k>=c) flag3=true;//总//printf("%d%d%d\n",flag1,flag2,flag3);if(flag1&&flag2&&flag3) printf("YES\n");else printf("NO\n"); }return 0;
}
打表里的i是n-1
#include<cstdio>
#include<cstring>
using namespace std;
int sg[100];
int a,b,c,d,n;
void init(){memset(sg,-1,sizeof(sg));
}
int Getsg(int x){if(sg[x]!=-1) return sg[x];if(x==0) return sg[x]=0;if(x==c||x==d) return sg[x]=1;if(x<c) return sg[x]=0;bool book[100];memset(book,0,sizeof(book));if(x>=d){sg[x-c]=Getsg(x-c);book[sg[x-c]]=true;sg[x-d]=Getsg(x-d);book[sg[x-d]]=true;}if(x>=c&&x<d){sg[x-c]=Getsg(x-c);book[sg[x-c]]=true;}for(int i=0;;i++){if(!book[i]) return sg[x]=i;}
}
int main(){scanf("%d%d",&c,&d);printf("c = %d , d = %d\n",c,d);for(int i=0;i<100;i++){//i是n-1init();int ans=Getsg(i);if(ans!=0) ans=1;//为了好观察,所有的必胜态的sg值都输出1printf("%3d %3d : %3d\n",i,(i+1)%(c+d),ans);}return 0;
}
+1学姐玩跳棋 (SG函数)相关推荐
- Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)
题目大题 题目大意: 解题思路: 首先我们对于子树u的SG函数为SG函数为SG函数为 ⨁是异或和\bigoplus是异或和⨁是异或和 SG[u]=mex{⨁w∈(w的父亲在u到v的路径上)SG[w]∣ ...
- 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)
前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...
- luogu2575 高手过招 sg函数
Description AKN玩游戏玩累了,于是他开始和同伴下棋了,玩的是跳棋!对手是wwx!这两位上古神遇在一起下棋,使得棋局变得玄幻莫测,高手过招,必有一赢,他们都将用最佳策略下棋,现在给你一个n ...
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
Time Limit: 5 Sec Memory Limit: 162 MB Submit: 871 Solved: 365 [Submit][Status][Discuss] Descripti ...
- 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...
- 厦大的计算机博士好考吗,2018双非学姐的厦大考博逆袭之路——本硕求学生涯历程...
原标题:2018双非学姐的厦大考博逆袭之路--本硕求学生涯历程 2018双非学姐的厦大考博逆袭之路--本硕求学生涯历程 作者:枰超 编辑:学长 2018年的春节已接近尾声,也距离我结束2018年博士申 ...
- 学生用的笔记本电脑什么样的好_大学生用的学生党笔记本什么牌子好,听听学姐的...
刚进入大学的萌新在选择笔记本电脑产品的时候可能会没有头绪,笔记本什么牌子好,什么样的笔记本电脑才是适合自己使用的呢?让师姐带着你,从一般需求.专业需求.娱乐需求等角度为你挑选一台合适的新机指条明路. ...
- 【HDU - 1847】Good Luck in CET-4 Everybody! (巴什博奕,PN图或sg函数)
题干: 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici ...
- 学姐百度实习面经(轻松拿offer)
本系列历史文章: 学姐,来挑战字节最牛部门 最强阿里巴巴历年经典面试题汇总:C++研发岗 关于我的那些面经--百度后端(附答案) <关于我的那些面经>滴滴Java岗(附答案) 朋友面神策数 ...
最新文章
- 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授
- python输出word内容_Django输出word文件(.doc),只在内容中显示原始html
- 工作126:Vue.ls.set传值 然后取值
- php长轮询阻塞,ajax长轮询时php被阻塞
- 检查xml文件中包含非法xml字符的个数(
- 65 年来,全英国向他道歉三次,图灵,计算机人不能忘记的男人
- 在c语言中large的作用,输入两个数组,调用large函数比较,计数,输出统计结果...
- phpstudy中php页面不识别php代码解决方法
- 一篇就让你懂线程池原理
- 滤波算法(二)—— 中位值滤波算法
- 户外运动手持GPS设备常识汇总
- 如何用PPT做一张高大上的照片
- Python 经典学习资料收集
- 文件怎么设置密码?一文带你看到文件加密的方法
- MySQL Workbench 8.0新建SCHEMAS和Table
- 【华为云服务之】在华为云ECS上安装Docker
- 牛客 小米校招 计算题 单调栈 接雨水
- Enow ICQ上的自白
- php抢购问题,PHP并发抢购解决方案
- 数据可视化(pyecharts库的介绍)
热门文章
- 关于 MCV Service 的 Response 封装(装饰器)
- 国庆假期浏览了几十篇YOLO改进英文期刊,总结改进创新的一些相同点(期刊创新点持续更新)
- 变电站AR智能巡检系统-广州华锐互动
- 15 爬虫 - Requests 代理(proxies参数)
- 架构本质解析-微博架构
- android版本怎么升级9.0,为什么安卓系统都升级到9.0了,而国内大部分都是Android7呢?...
- nei遗传距离聚类树
- Android面试--2017最新
- 《乔布斯传》英文原著重点词汇笔记(十五)【 chapter fourteen】
- LSUN数据集 (简介,下载,格式转换及bug修复)