[QSCOJ39]喵哈哈村的代码传说 第五章 找规律
题目大意:
给你n堆排,两人轮流对其中一堆牌进行以下操作之一:
1.从这堆牌中取出任意数量的牌;
2.将这这堆牌分为任意大小的3堆牌。
不能操作者负。
问先手是否有必胜策略。
思路:
尝试构造sg函数,游戏的状态为某堆牌中牌的数量,
打表计算发现当x为8的倍数时,sg(x)=x-1;
当x在模8意义下为7时,sg(x)=x+1;
否则sg(x)=x。
手算了以下x=0~8时的情况,解释如下:
当x=0时,先手没法操作,sg(x)=0;
当x=1时,当前的后继状态为(0),sg(x)=mex{sg(0)}=1;
当x=2时,当前的后继状态为(0)(1),sg(x)=mex{sg(0),sg(1)}=2;
当x=3时,当前的后继状态为(0)(1)(2)(1 1 1),sg(x)=mex{sg(0),sg(1),sg(2),...,sg(1)^sg(1)^sg(1)}=3;
……
当x=7时,当前的后继状态为(0)~(6)(1 1 5)(1 2 4)(1 3 5)(2 2 3),此时(1 2 4)所对应的sg值为sg(1)^sg(2)^sg(4),sg(7)=8;
而当x=8时,当前的后继状态中(7)的sg值为8,而其它的后继状态中sg值也没有等于7的,所以sg(x)=7。
程序实现十分简单。
#include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
inline int getsg(const int &x) {
if(x%==) return x-;
if(x%==) return x+;
return x;
}
int main() {
for(register int T=getint();T;T--) {
int ans=;
for(register int n=getint();n;n--) {
ans^=getsg(getint());
}
puts(ans?"First player wins.":"Second player wins.");
}
return ;
}
[QSCOJ39]喵哈哈村的代码传说 第五章 找规律的更多相关文章
- 喵哈哈村的魔法考试 Round #6 (Div.3) 题解
有任何问题 直接联系QQ:475517977 喵哈哈村的代码传说 第一章 冒泡排序 第一题就是排序嘛,在ACM/OI竞赛中,我只推崇一种排序方法,就是直接调用algorithm里面的sort函数. # ...
- 喵哈哈村的魔法考试 Round #13 (Div.2) 题解
喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include<bits/stdc++.h> using namespace ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05 最后更新: 2017年2月21日 20:06 时间限制: 1000ms 内存限制: 128M 描述 传说喵哈哈村有三种神 ...
- qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)
喵哈哈村的魔法源泉(2) 发布时间: 2017年5月9日 20:59 最后更新: 2017年5月9日 21:00 时间限制: 1000ms 内存限制: 128M 描述 喵哈哈村有一个魔法源 ...
- 喵哈哈村的魔法考试 Round #20 (Div.2) 题解
题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...
- 喵哈哈村的魔法考试 Round #19 (Div.2) 题解
题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...
- 喵哈哈村的魔法考试 Round #18 (Div.2) 题解
喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...
- 喵哈哈村的魔法考试 Round #11 (Div.2) 题解
喵哈哈村的星星与月亮(一) 打表发现答案就等于a*b%mod 注意a*b可能爆longlong #include<bits/stdc++.h> using namespace std; c ...
- 喵哈哈村的魔法考试 Round #9 (Div.2) 题解
A题 喵哈哈村的数据筛选游戏 题解:这道题签到题,拿个数组记录一下这个数是否出现过即可. #include<bits/stdc++.h> using namespace std; cons ...
随机推荐
- js学习阶段总结
typeof操作符:返回字符串,可能是“undefined”,“boolean”,“ string”,“number”,“object”,“function”中的一种,所以不能判断数组. NaN(No ...
- canvas 绘制星座图(好玩)--转载
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)
题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...
- Problem D. Berland Railroads Gym - 101967D (思维)
题目链接:https://cn.vjudge.net/contest/274029#problem/D 题目大意:给你0-9每个数的个数,然后让你找出最大的数,满足的条件是任意三位相连的都能被三整除. ...
- 网易android开发面试题及心得
前几天面试网易android开发,总体感觉问题难度一般.怪我自己没有好好梳理知识,尤其是基础,后面就没消息了... 笔试: 1.描述Activity 生命周期 2.什么是ANR,如何规避? 3.描述a ...
- juery中循环遍历json数组
var dataList=[]; var stock0={stockcode:"007758",stockname:"商业政7",state:"1&q ...
- URAL题解一
URAL题解一 URAL 1002 题目描述:一种记住手机号的方法就是将字母与数字对应,如图.这样就可以只记住一些单词,而不用记住数字.给出一个数字串和n个单词,用最少的单词数来代替数字串,输出对应的 ...
- 服务号使用微信网页授权(H5应用等)
获取授权准备 AppId 服务号已经认证且获取到响应接口权限 设置网页授权域名 公众号设置 - 功能设置 - 网页授权域名.注意事项: 回调页面域名或路径需使用字母.数字及"-"的 ...
- Ubuntu或者Ubuntu server重新设置IP地址
1.打开终端输入: sudo vi /etc/network/interfaces 2.进入编辑页面 改一处,添加5行内容,如下图: 3.修改好后esc :wq进行保存 4.输入: sudo / ...
- Hadoop(六)MapReduce的入门与运行原理
一 MapReduce入门 1.1 MapReduce定义 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架: Mapreduce核心功能是将用 ...