ssoj2461富可敌国
2015-10-28 20:28
232 查看
题目描述
富可敌国的VVBS有许多枚硬币,一天,他刷完了题,没事于是,翻出了他的硬币。他将硬币排成一排,摆在桌上,有的正面朝上,有的反面朝上。接着,他叫来了他的好朋友LJH,要和他玩游戏。游戏规则大致是这样的:首先给定N(硬币数)、K,以及初始硬币的状态,然后两个人轮流操作,对于某次操作,需从N枚硬币中选出连续的K枚硬币,并且要求这K枚硬币中第一枚(最左边)的那枚硬币必须正面朝上,然后将这K枚硬币全部翻转一次,这样为一次操作。当操作者无法操作时,游戏结束,最后一次操作的人获胜。由于LJH特别能屠,VVBS打算写一个程序来判断在当前情况下,作为先手的他能否必胜。输入
第一行:一个整数T,表示数据组数对于每组数据,
第一行两个正整数:N、K,分别表示硬币枚数以及每次选择连续的硬币数
第二行N个01整数,中间用空格隔开,0表示反面,1表示正面(先读入的硬币在左边)
输出
共T行,每行为“Yes”或“No”(不包括引号),Yes表示先手必胜,No表示先手必败(在双方都采取最优决策下),如果你认为游戏永远不会结束,输出2147483647个“a”(不包括引号)样例输入
33 10 1 04 11 0 0 15 30 1 1 0 1样例输出
YesNoYes提示
样例解释:对于第一组数据,先手只能将唯一一枚正面翻过来,后手无法操作,先手胜
对于第二组数据,先手无论将哪一枚正面的硬币翻过来,后手将另一枚正面翻过来,先手无法操作,先手败
对于第三组数据,先手只需将第2枚开始的K枚硬币翻过来(局面为0 0 0 1 1),后手无法操作,先手胜
数据规模与约定:
对于20%的数据,N<=6
对于40%的数据,N<=20
对于另外20%的数据,N<=200000,T<=6
以上数据,空间限制512M
对于另外10%的数据,N<=1000000,K<=20
对于100%的数据,T<=300,N<=10000000,K<=N,且∑N<=3*10^7
良心出题人保证:使用scanf读入时间不会超过1500MS
【题解】
【代码】
#include <cstdio> using namespace std; int n,k,t; inline int get(){ char c;while(!((c=getchar())>='0' && c<='9')); int v=c-48;while((c=getchar())>='0' && c<='9')v=v*10+c-48; return v; } int main(){ int T=get(); while(T--){ n=get(),k=get();int x; t=n-n/k*k+1;bool f=0; for(int i=1;i<=n;++i){ x=get(); if(i==t)f^=x,t+=k; } if(f)printf("Yes\n"); else printf("No\n"); } return 0; }
【注意】空间限制6M
相关文章推荐
- Java匿名内部类
- 升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错(引用他人的)
- 算法中涉及的专业英语
- code first网站发布后数据表中没有数据问题
- uvaoj 10859 - Placing Lampposts
- 设置Tomcat的UTF-8编码
- Xendesktop5连接vmware VCSA6.0报错及VCSA6.0更换证书问题
- Family planning
- 树莓派Ekho实现中文语音合成
- 中国大学MOOC-陈越、何钦铭-数据结构 排序(堆排序)
- 【随笔】#与 ##的使用含义与区别
- Tomcat内存溢出
- 为你解析神奇的数据库基本用法
- win10无法新建文件夹怎么办 win10右键新建菜单设置方法
- NYOJ 1112 求次数(map)
- poj 1127 Jack Straws 几何 + 弗洛伊德
- Java工具类之Apache的Commons Lang和BeanUtils
- 分布式消息队列XXL-MQ
- 博客已迁移至gzxultra.github.io
- 登陆器列表