题意:
给你n,a,b三个数
a!=b
,在
[1,n]
这个范围内,
构造一个集合,这个集合初始只有
a,b
然后你可以通过加减两种运算对这个集合中的数据进行扩增,直到不能扩增。
注意限制条件:新的元素必须在
[1,n]
内且最多出现一次
先不能行动的输。
问你先手Y和后手I谁赢?
思路:
找规律可以发现:在这个最终构建的集合里,最小间距为d = gcd(a,b),所以令
n=n/d
此时的n即为最终构建出来的集合的元素数,再减2,再判断奇偶就出来了。
AC代码:
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <string.h>
#define N 10000
using namespace std;
int gcd(int a,int b){
return b == 0 ? a : gcd(b,a%b);
}
int main()
{
int cas = 0;
int t;
cin>>t;
int n,a,b;
while(t--){
cas++;
scanf("%d%d%d",&n,&a,&b);
printf("Case #%d: ",cas);
int m = gcd(a,b);
n = n/m;
if(n&1)
puts("Yuwgna");
else
puts("Iaka");
}
return 0;
}