BZOJ 4147: [AMPPZ2014]Euclidean Nim 【分类讨论】

为什么都是些分类讨论神题啊啊啊啊啊。。。
只好再次膜拜Po姐 → \rarr BZOJ 4147 AMPPZ2014 Euclidean Nim 博弈论+数论

#include<cstdio>
#include<cctype>
#include<cstring>
#include<map>
#include<algorithm>
#define maxn 105
using namespace std;
template<class T>inline void read(T &a){
    char c;while(!isdigit(c=getchar()));
    for(a=c-'0';isdigit(c=getchar());a=a*10+c-'0');
}
int n,p,q,T;
inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
bool solve(int p,int q,int n){
    if(p>q){
        if(p>n) return 0;
        int x=n%p;
        if(x>=q) return 0;
        return x%(p-q)==0;
    }
    else{
        if(p<=n||n+p<q) return 1;
        return !solve(q,p,n+q);
    }
}
int main()
{
    read(T);
    while(T--){
        read(p),read(q),read(n);
        int d=gcd(p,q);
        if(n%d) {puts("R");continue;}
        if(p==q) {puts("E");continue;}
        puts(solve(p/d,q/d,n/d)?"E":"P");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值