+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函数)相关推荐

  1. Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)

    题目大题 题目大意: 解题思路: 首先我们对于子树u的SG函数为SG函数为SG函数为 ⨁是异或和\bigoplus是异或和⨁是异或和 SG[u]=mex{⨁w∈(w的父亲在u到v的路径上)SG[w]∣ ...

  2. 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)

    前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...

  3. luogu2575 高手过招 sg函数

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

  4. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  5. 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题

    题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...

  6. 厦大的计算机博士好考吗,2018双非学姐的厦大考博逆袭之路——本硕求学生涯历程...

    原标题:2018双非学姐的厦大考博逆袭之路--本硕求学生涯历程 2018双非学姐的厦大考博逆袭之路--本硕求学生涯历程 作者:枰超 编辑:学长 2018年的春节已接近尾声,也距离我结束2018年博士申 ...

  7. 学生用的笔记本电脑什么样的好_大学生用的学生党笔记本什么牌子好,听听学姐的...

    刚进入大学的萌新在选择笔记本电脑产品的时候可能会没有头绪,笔记本什么牌子好,什么样的笔记本电脑才是适合自己使用的呢?让师姐带着你,从一般需求.专业需求.娱乐需求等角度为你挑选一台合适的新机指条明路. ...

  8. 【HDU - 1847】Good Luck in CET-4 Everybody! (巴什博奕,PN图或sg函数)

    题干: 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici ...

  9. 学姐百度实习面经(轻松拿offer)

    本系列历史文章: 学姐,来挑战字节最牛部门 最强阿里巴巴历年经典面试题汇总:C++研发岗 关于我的那些面经--百度后端(附答案) <关于我的那些面经>滴滴Java岗(附答案) 朋友面神策数 ...

最新文章

  1. 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授
  2. python输出word内容_Django输出word文件(.doc),只在内容中显示原始html
  3. 工作126:Vue.ls.set传值 然后取值
  4. php长轮询阻塞,ajax长轮询时php被阻塞
  5. 检查xml文件中包含非法xml字符的个数(
  6. 65 年来,全英国向他道歉三次,图灵,计算机人不能忘记的男人
  7. 在c语言中large的作用,输入两个数组,调用large函数比较,计数,输出统计结果...
  8. phpstudy中php页面不识别php代码解决方法
  9. 一篇就让你懂线程池原理
  10. 滤波算法(二)—— 中位值滤波算法
  11. 户外运动手持GPS设备常识汇总
  12. 如何用PPT做一张高大上的照片
  13. Python 经典学习资料收集
  14. 文件怎么设置密码?一文带你看到文件加密的方法
  15. MySQL Workbench 8.0新建SCHEMAS和Table
  16. 【华为云服务之】在华为云ECS上安装Docker
  17. 牛客 小米校招 计算题 单调栈 接雨水
  18. Enow ICQ上的自白
  19. php抢购问题,PHP并发抢购解决方案
  20. 数据可视化(pyecharts库的介绍)

热门文章

  1. 关于 MCV Service 的 Response 封装(装饰器)
  2. 国庆假期浏览了几十篇YOLO改进英文期刊,总结改进创新的一些相同点(期刊创新点持续更新)
  3. 变电站AR智能巡检系统-广州华锐互动
  4. 15 爬虫 - Requests 代理(proxies参数)
  5. 架构本质解析-微博架构
  6. android版本怎么升级9.0,为什么安卓系统都升级到9.0了,而国内大部分都是Android7呢?...
  7. nei遗传距离聚类树
  8. Android面试--2017最新
  9. 《乔布斯传》英文原著重点词汇笔记(十五)【 chapter fourteen】
  10. LSUN数据集 (简介,下载,格式转换及bug修复)