题目大意:
  给你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]喵哈哈村的代码传说 第五章 找规律的更多相关文章

  1. 喵哈哈村的魔法考试 Round #6 (Div.3) 题解

    有任何问题 直接联系QQ:475517977 喵哈哈村的代码传说 第一章 冒泡排序 第一题就是排序嘛,在ACM/OI竞赛中,我只推崇一种排序方法,就是直接调用algorithm里面的sort函数. # ...

  2. 喵哈哈村的魔法考试 Round #13 (Div.2) 题解

    喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include<bits/stdc++.h> using namespace ...

  3. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  4. qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)

    喵哈哈村的魔法源泉(2) 发布时间: 2017年5月9日 20:59   最后更新: 2017年5月9日 21:00   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村有一个魔法源 ...

  5. 喵哈哈村的魔法考试 Round #20 (Div.2) 题解

    题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...

  6. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  7. 喵哈哈村的魔法考试 Round #18 (Div.2) 题解

    喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...

  8. 喵哈哈村的魔法考试 Round #11 (Div.2) 题解

    喵哈哈村的星星与月亮(一) 打表发现答案就等于a*b%mod 注意a*b可能爆longlong #include<bits/stdc++.h> using namespace std; c ...

  9. 喵哈哈村的魔法考试 Round #9 (Div.2) 题解

    A题 喵哈哈村的数据筛选游戏 题解:这道题签到题,拿个数组记录一下这个数是否出现过即可. #include<bits/stdc++.h> using namespace std; cons ...

随机推荐

  1. JS设计模式——4.继承(概念)

    类式继承 0.构造函数 一个简单的Person类 function Person(name){ this.name = name; } Person.prototype.getName = funct ...

  2. C - Contest Setting Gym - 101982C dp 补题

    题目链接:https://vjudge.net/contest/273260#problem/C 学习了一下别人的思路,首先去重,然后离散化. dp数组开二维,每一次更新,状态转移方程,dp[ i ] ...

  3. Dull Chocolates Gym - 101991D 离散化 前缀和

    题目链接:https://vjudge.net/problem/Gym-101991D 具体思路:首先看数据范围,暴力肯定不可以,可以下离散化,然后先求出离散化后每一个点到(1,1)的符合题目的要求的 ...

  4. TinyOS在ubuntu 14.04下安装教程

    1:打开/etc/apt/sources.list 文件,在文件最底部添加安装源: deb http://tinyos.stanford.edu/tinyos/dists/ubuntu lucid m ...

  5. 关于servlet中重定向、转发的地址问题

    先写一个正斜杠"/",再判断是服务器使用该地址还是网站使用该地址. 访问网络资源用/,访问硬盘资源用\. 例如: 转发:      request.getRequestDispat ...

  6. Android 反编译神器jadx的使用

    一.前言 今天介绍一个非常好用的反编译的工具 jadx .jadx 的功能非常的强大,对我而言,基本上满足日常反编译需求. jadx 优点: 图形化的界面. 拖拽式的操作. 反编译输出 Java 代码 ...

  7. git-定制属于你的log格式

    软件版本:    操作系统:ubuntu10.04     内核版本:Linux version 2.6.32-36-generic     git 版本:git version 1.7.0.4 1. ...

  8. $NTT$(快速数论变换)

    - 概念引入 - 阶 对于$p \in N_+$且$(a, \ p) = 1$,满足$a^r \equiv 1 (mod \ p)$的最小的非负$r$为$a$模$p$意义下的阶,记作$\delta_p ...

  9. C/C++——库函数strcpy和strdup比较

    版权声明:原创文章,禁止转载. 1. strcpy 原型: extern char *strcpy(char *dest,char *src); 用法: #include <string.h&g ...

  10. linux系统kill一些类名称相同的进程

    jps | grep "Main" | awk '{print $1}' | xargs kill 将其中的 Main 替换为需要kill的进程名即可.