题目大意:
有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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-24 14:09:44