题目大意:
有n个庙经过长时间风吹雨打需要修补,只有两座(被标记为a,b)完好无损不需要修补,有两个和尚轮流去修补这n-2个庙,每个和尚每次只能修补一个庙标记为i,并要求i满足i=j+k或者i=j-k,每个庙只能被修建一次;
其中j和k代表已经修建好的庙,Yuwgna先开始,问最后谁不能修建谁输;
思路:一看题目博弈论,后来就是找 m, n 的最大公约数
#include <iostream>
#include <cstdio>
using namespace std;
int gcd(int a, int b)
{
if(b > 0)
return gcd(b, a%b);
return a;
}
int main()
{
// freopen("test.txt", "r", stdin);
int t;
scanf("%d", &t);
for(int i = 1; i<= t; i++)
{
int n, a, b;
scanf("%d%d%d", &n, &a, &b);
printf("Case #%d: ", i);
int q = gcd(a, b);
if(q == 1)
{
if(n%2 == 0)
printf("Iaka\n");
else{
printf("Yuwgna\n");
}
}
else{
q = n/q;
if(q%2 == 0)
printf("Iaka\n");
else{
printf("Yuwgna\n");
}
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://www.cnblogs.com/ygdblogs/p/4935694.html