题意:
初始给你a,b两座塔,然后有两个人轮流建塔,可以建的位置满足存在j,k使得当前要建的塔位置i,i=j+k或者i=j-k,然后不能再建塔的人输,问谁赢
思路:
可以观察发现到塔的位置一定是ax+by,x,y是系数,然后满足这个数在1到n之间
可以猜想一下,不论建造顺序是什么,一定可以把所有满足ax+by的位置建到,(至于证明我不会呀)
现在只需要算出有多少个这样的位置就好了,由gcd的性质可以知道,ax+by一定是gcd(a,b)的倍数。
然后算一下输出答案就可以了
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int kase=0;
void solve();
int main()
{
int T;
kase=0;
scanf("%d",&T);
while(T--){
kase++;
solve();
}
return 0;
}
void solve()
{
int n,a,b;
scanf("%d %d %d",&n,&a,&b);
int g=__gcd(a,b);
int ans=n/g;
printf("Case #%d: ",kase);
if(ans&1){
puts("Yuwgna");
}
else{
puts("Iaka");
}
}