4147: [AMPPZ2014]Euclidean Nim

Time Limit: 1 Sec Memory Limit: 256 MB

Description

Euclid和Pythagoras在玩取石子游戏,一开始有n颗石子。

Euclid为先手,他们按如下规则轮流操作:

·若为Euclid操作,如果n< p,则他只能新放入p颗石子,否则他可以拿走p的倍数颗石子。

·若为Pythagoras操作,如果n< q,则他只能新放入q颗石子,否则他可以拿走q的倍数颗石子。

拿光所有石子者胜利。假设他们都以最优策略操作,那么获胜者是谁?

Input

第一行包含一个正整数t(1<=t<=1000),表示数据组数。

接下来t行,每行三个正整数p,q,n(1<=p,q,n<=10^9),表示一组数据。

Output

输出t行。第i行输出第i组数据的答案,如果Euclid必胜,输出E,如果Pythagoras必胜,输出P,

如果游戏永远不会停止,输出R。

Sample Input

4

3 2 1

2 3 1

3 4 5

2 4 3

Sample Output

P

P

E

R

HINT

在第一组数据中,Euclid必须新放入3颗石子,然后Pythagoras拿走4颗石子并获胜。

Source

鸣谢Claris上传

/*
博弈题.
首先令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,就变成了第二种情况。
粘的zjk的2333.
*/
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int t,n,p,q;
int gcd(int x,int y)
{
if(!y) return x;
return gcd(y,x%y);
}
bool check(int a,int b,int x)
{
if(x%a<b&&(x%a)%(a-b)==0) return true;
return false;
}
void slove()
{
int g=gcd(p,q);
if(n%g){printf("R\n");return ;}//1
p/=g,q/=g,n/=g;
if(p==q) {printf("E\n");return ;}//2
if(p>q&&n<p) {printf("P\n");return;}//3
if(p>q&&n>=p)//4
{
if(check(p,q,n)) {printf("E\n");return ;}
else {printf("P\n");return ;}
}
if(p<q&&n<p)//5
{
if(n+p<q) {printf("E\n");return ;}
else if(check(q,p,n+p)) {printf("P\n");return ;}
else {printf("E\n");return ;}
}
if(p<q&&n>=p) {printf("E\n");return ;}//6
return ;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&p,&q,&n);
slove();
}
return 0;
}

Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)的更多相关文章

  1. BZOJ 4147: [AMPPZ2014]Euclidean Nim (分类讨论博弈神题)

    orz PoPoQQQ神犇,每一篇题解都写得很清楚 (看了PoPoQQQ的哲♂学三部曲,瑟瑟发抖) CODE #include <cstdio> #include <algorith ...

  2. 【BZOJ】4147: [AMPPZ2014]Euclidean Nim

    [算法]博弈论+数论 [题意]给定n个石子,两人轮流操作,规则如下: 轮到先手操作时:若石子数<p添加p个石子,否则拿走p的倍数个石子.记为属性p. 轮到后手操作时:若石子数<q添加q个石 ...

  3. BZOJ:2819 NIM(树链剖分||DFS序 &&NIM博弈)

    著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略的.于是v ...

  4. HDU 2509 Nim博弈变形

    1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

  5. HDU 1907 Nim博弈变形

    1.HDU 1907 2.题意:n堆糖,两人轮流,每次从任意一堆中至少取一个,最后取光者输. 3.总结:有点变形的Nim,还是不太明白,盗用一下学长的分析吧 传送门 分析:经典的Nim博弈的一点变形. ...

  6. zoj3591 Nim(Nim博弈)

    ZOJ 3591 Nim(Nim博弈) 题目意思是说有n堆石子,Alice只能从中选出连续的几堆来玩Nim博弈,现在问Alice想要获胜有多少种方法(即有多少种选择方式). 方法是这样的,由于Nim博 ...

  7. hdu 1907 John&& hdu 2509 Be the Winner(基础nim博弈)

    Problem Description Little John is playing very funny game with his younger brother. There is one bi ...

  8. 关于NIM博弈结论的证明

    关于NIM博弈结论的证明 NIM博弈:有k(k>=1)堆数量不一定的物品(石子或豆粒…)两人轮流取,每次只能从一堆中取若干数量(小于等于这堆物品的数量)的物品,判定胜负的条件就是,最后一次取得人 ...

  9. HDU - 1850 Nim博弈

    思路:可以对任意一堆牌进行操作,根据Nim博弈定理--所有堆的数量异或值为0就是P态,否则为N态,那么直接对某堆牌操作能让所有牌异或值为0即可,首先求得所有牌堆的异或值,然后枚举每一堆,用已经得到的异 ...

随机推荐

  1. [LOJ2065] [SDOI2016]模式字符串

    题目链接 洛谷:https://www.luogu.org/problemnew/show/P4075 LOJ:https://loj.ac/problem/2065 Solution 这种题看起来就 ...

  2. UOJ185 ZJOI2016 小星星 容斥、树形DP

    传送门 先考虑一个暴力的DP:设\(f_{i,j,S}\)表示点\(i\)映射到了图中的点\(j\),且点\(i\)所在子树的所有点映射到了图中的集合\(S\)时的映射方案数,转移暴力地枚举子集即可, ...

  3. 测试PHP-FPM的工作流中的疑惑点

    顺序比较乱,想到什么测试什么,测试环境 PHP7.2 和 MariaDB10.3.11 PHP-FPM是 master/worker 多进程模型master负责和web-server通讯,把接受到请求 ...

  4. java.lang.SecurityManager、java.security包

    学习java大概3年多了,一直没有好好研究过java安全相关的问题,总是会看到 SecurityManger sm = System.getSecurityManager(); if(sm!=null ...

  5. ThreadPoolExecutor使用错误导致死锁

    背景 10月2号凌晨12:08收到报警,所有请求失败,处于完全不可用状态 应用服务器共四台resin,resin之前由四台nginx做负载均衡 服务器现象及故障恢复步骤 登入服务器,观察resin进程 ...

  6. 【转载】 C#中List集合使用InsertRange方法在指定的位置插入另一个list集合

    在C#的List集合操作过程中,如果在集合中的某个位置插入一个新的元素对象,可以使用Insert方法进行操作.其实List集合也提供了在特定的位置插入另一个集合,然后另一个集合的数据整个写入到当前集合 ...

  7. WIN7U X64环境下的SQL SERVER 2008R2的防火墙配置

    测试需要,备忘. CMD下运行,可以把sql server 要用的端口都开好. netsh advfirewall firewall add rule name = SQLPort dir = in ...

  8. mybatis异常:nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType

    异常详细 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Builde ...

  9. iOS配置TARGETS

    说一下背景 自从这个项目不死不活的迭代了2年,从项目搭建到现在,一直都是自己在开发和维护,所以项目结构非常清晰,但是之前的水平写的代码现在看来也是惨不忍睹,不过本人比较懒,也就没有考虑过重构的事情 - ...

  10. js 数组的深度拷贝 的四种实现方法

    首先声明本人资质尚浅,本文只用于个人总结.如有错误,欢迎指正.共同提高. --------------------------------------------------------------- ...