HDU 5512 Pagodas

来源:互联网 发布:win7允许网络访问 编辑:程序博客网 时间:2024/05/16 14:17

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512


题意:有n个数1~n,现在给出a,b两个数,每次只能选择未出现过的而且是由已出现过的数集合中i,j的和或差即i+j或i-j,谁没数可选即输。


思路:发现每次选数都是gcd(a,b)的倍数,那么先求一下范围内有多少个可选的数,然后判断一下奇偶即可。


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <algorithm>#include <stack>#include <map>#include <set>#include <vector>#include <sstream>#include <queue>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define LL long long#define ULL unsigned long long#define inf 0x7fffffff#define mod 100000007#define mp make_pair#define fi first#define se second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid int m=(l+r)>>1int gcd(int a,int b){    return b==0?a:gcd(b,a%b);}int main(){    int T,a,b,n;    cin>>T;    rep(kase,1,T)    {        scanf("%d%d%d",&n,&a,&b);        int x = n/gcd(a,b) - 2;        printf("Case #%d: %s\n",kase,(x&1)==0?"Iaka":"Yuwgna");    }    return 0;}




0 0
原创粉丝点击