2015沈阳ICPC题解

D:Pagodas(塔)      http://acm.hdu.edu.cn/showproblem.php?pid=5512

//15ms(1000ms) hdu不能调用__gcd()函数?
/*theme:给定n,表示一共要建n个塔(编号从1到n),给出a,b代表最开始有了塔a和塔b
两个人轮流建,每次只能建塔i,i=j+k或i=j-k,j,k为已经建成的塔,A先开始,每次选择最优
无法继续建塔的一方输,问最后谁赢
Input:t(1≤t≤500):case number,n:(2≤n≤20000)and two different integers a and b
output:output the winner ("Yuwgna" or "Iaka").
*
*
*
*
*
*
solution:因为要求是从a,b开始两数相加或相减,而a%g=0,b%g=0,(g=gcd(a,b)),所以(a+b)%g=0,(b-a)%g=0
即能建的塔的个数为n/g,因为塔的间距已由a,b确定,只能为g的倍数,所以最后判断一下奇偶即可
*/

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

int gcd(int a,int b)
{
    return 0==b?a:gcd(b,a%b);
}

int main()
{
    int t;
    cin>>t;
    int i=0;
    while(t--)
    {
        int n,a,b;
        scanf("%d%d%d",&n,&a,&b);
        int g=gcd(a,b);
        int cnt=n/g-2;
        if(cnt&1)
            printf("Case #%d: Yuwgna\n",++i);
        else
            printf("Case #%d: Iaka\n",++i);
    }
}

/*
16
2 1 2
3 1 3
67 1 2
100 1 2
8 6 8
9 6 8
10 6 8
11 6 8
12 6 8
13 6 8
14 6 8
15 6 8
16 6 8
1314 6 8
1994 1 13
1994 7 12

Case #1: Iaka
Case #2: Yuwgna
Case #3: Yuwgna
Case #4: Iaka
Case #5: Iaka
Case #6: Iaka
Case #7: Yuwgna
Case #8: Yuwgna
Case #9: Iaka
Case #10: Iaka
Case #11: Yuwgna
Case #12: Yuwgna
Case #13: Iaka
Case #14: Yuwgna
Case #15: Iaka
Case #16: Iaka
*/

猜你喜欢

转载自blog.csdn.net/wangqianqianya/article/details/82493690