Euclidean Nim(bzoj 4147)
Description
Input
Output
Sample Input
3 2 1
2 3 1
3 4 5
2 4 3
Sample Output
P
E
R
HINT
在第一组数据中,Euclid必须新放入3颗石子,然后Pythagoras拿走4颗石子并获胜。
/*
第一次写博弈论,这道题貌似很经典
首先令d=gcd(p,q),如果d不整除n,那么显然无解。
下面讨论有解的情况:
① p=q :显然先手必胜。
② p>q&&n<p :先手第一次数量加p,后手可以把数量变成n%q,这样先手永远无法取石子,后手必胜。
③ p>q&&n>=p :如果先手第一次取完石子,石子数量大于p,后手还是可以把数量变成n%q,后手必胜;
否则,先手取成n mod p -> 后手+q -> 先手?p -> 后手+q -> ……,如果n%(p-q)=0,则先手必胜。
④ p<q&&n<p :先手第一次把数量变成n+p,如果n+p<q,就变成了第二种情况,否则是第三种情况。
⑤ p<q&&n>=p :那么先手可以把石子变成n%p,就变成了第二种情况。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool ok(int n,int p,int q){
return n%p<q&&n%p%(p-q)==;
}
int main(){
int T;scanf("%d",&T);
while(T--){
int p,q,n;
scanf("%d%d%d",&p,&q,&n);
int gcd=__gcd(p,q);
if(n%gcd){
printf("R\n");
continue;
}
p/=gcd;q/=gcd;n/=gcd;
if(p==q) printf("E\n");
else if(p>q){
if(n<p) printf("P\n");
else {
if(ok(n,p,q)) printf("E\n");
else printf("P\n");
}
}
else {
if(n<p){
if(n+p<q) printf("E\n");
else {
if(ok(n+p,q,p)) printf("P\n");
else printf("E\n");
}
}
else printf("E\n");
}
}
return ;
}
Euclidean Nim(bzoj 4147)的更多相关文章
- 【BZOJ】4147: [AMPPZ2014]Euclidean Nim
[算法]博弈论+数论 [题意]给定n个石子,两人轮流操作,规则如下: 轮到先手操作时:若石子数<p添加p个石子,否则拿走p的倍数个石子.记为属性p. 轮到后手操作时:若石子数<q添加q个石 ...
- Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)
4147: [AMPPZ2014]Euclidean Nim Time Limit: 1 Sec Memory Limit: 256 MB Description Euclid和Pythagoras在 ...
- BZOJ 4147: [AMPPZ2014]Euclidean Nim (分类讨论博弈神题)
orz PoPoQQQ神犇,每一篇题解都写得很清楚 (看了PoPoQQQ的哲♂学三部曲,瑟瑟发抖) CODE #include <cstdio> #include <algorith ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- AMPPZ2014
[AMPPZ2014]The Lawyer 记录每天结束的最早的会议以及开始的最晚的会议即可. #include<cstdio> #define N 500010 int n,m,i,d, ...
- 【BZOJ】【2819】NIM
这题……咋说捏,其实是一道披着博弈论外衣的树上操作问题…… 随便用dfs序或者树链剖分转成序列,然后查询路径上的所有点的NIM和(异或和)就行了,毕竟除了是在树上以外,就是裸的NIM问题. 树链剖分: ...
- [BZOJ - 2819] Nim 【树链剖分 / DFS序】
题目链接: BZOJ - 2819 题目分析 我们知道,单纯的 Nim 的必胜状态是,各堆石子的数量异或和不为 0 .那么这道题其实就是要求求出树上的两点之间的路径的异或和.要求支持单点修改. 方法一 ...
- BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基
[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...
- [BZOJ 2819]NIM(dfs序维护树上xor值)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2819 分析: 树上的nim游戏,关键就是要判断树上的一条链的异或值是否为0 这个题目有 ...
随机推荐
- ES6初探——编译环境搭建
不好意思我又要来写操作文档了,看起来更像wiki的博客(如果你想深入学习,请阅读文末列的参考资料).本文将示例如何把ES6编译成ES5. 首先,你要自行查阅什么是ES6,和ES5.javascript ...
- 代码审查的艺术:Dropbox 的故事
Dropbox 的 iOS 应用中的每一行代码,都是开始于被添加到 Maniphest 中的一个 bug 或者功能任务,Maniphest 是我们的任务管理系统.当一位工程师在上面接受一个任务,那么在 ...
- 如何使用 Java 生成二维码
步骤 下载jar包(QRCode.jar) maven项目手动引入jar包 编写实体类实现二维码的生成 controller调用 下载jar包(QRCode.jar) 下载网址如下: QRCode生成 ...
- codeforces415D. Glad to see you!(交互)
题意 交互题. 有$k$个值域为$[1, n]$的数. 请在不超过$60$次询问内找出其中的两个数. 每次询问形式为1 x y 交互库会返回$|x - a| <= |y - b| ? " ...
- Android Gradle与Gradle插件的对应关系
查看链接 https://blog.csdn.net/dazhong2012/article/details/80585834
- 【HEVC简介】Inter Prediction Tools
参考文献:见<High Efficiency Video Coding (HEVC)>Inter-Picture Prediction in HEVC章节 <HEVC标准介绍.HEV ...
- 纯css滚动公告栏目
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Jquery中children与find之间的区别
<table id="tb"> <tr> <td>0</td> <td>1</td> <td>2 ...
- docker run之后状态总是Exited
add -it docker run -it -name test -d nginx:latest /bin/bash
- Visual C++中error spawning cl.exe错误的两种解决方法.
可能很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的 “Compiling... ,Error spawning cl.exe”错误提示给郁闷过.很多人的 选择是重装, ...