Pagodas HDU - 5512
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pagodas HDU - 5512相关的知识,希望对你有一定的参考价值。
题意:
一开始给你两个数a和b,你可以得到c通过,c=a+b,或者c=a-b,你所能得到的数的范围是1~n,两个人轮流操作,当有一方无法操作时,另一方获胜
题解:
c=a+b,c=a-b
我们可以发现所得数都满足ax+by,而根据裴蜀定理:对于任意的正整数a,b,一定存在非零整数x,y,使得xa+yb=gcd(a,b),对于任意的xa+yb=d,d一定是gcd(a,b)的倍数
所有1~n中可以被操作生成的数的数量为n/gcd(a,b),因为一开始给了你两个,所以还要减2,n/gcd(a,b)-2
代码:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(b)return gcd(b,a%b);
return a;
}
int main(){
int t;
scanf("%d",&t);
int cas=0;
//cout<<gcd(6,8);
while(t--){
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
int minn=gcd(a,b);
int num=n/minn-2;
if(num%2==0)printf("Case #%d: Iaka\\n",++cas);
else printf("Case #%d: Yuwgna\\n",++cas);
}
return 0;
}
以上是关于Pagodas HDU - 5512的主要内容,如果未能解决你的问题,请参考以下文章