2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学) HDU 5512 Pagodas

116 篇文章 0 订阅
69 篇文章 0 订阅

题意:n座塔,除编号为a,b的塔保留下来以外,其他塔需要重建,对于已建成的塔j,k(包括a,b两塔),每次只能重建编号为j+k或j-k的塔,Yuwgna和Iaka两个僧人轮流建一座塔,Yuwgna先手,最后不能建的人输,问最终获胜的人是哪个

解:我们其实可以尝试一下j+k与j-k都可以得到哪些数,最终我们发现能建的塔的编号必定是gcd(a,b)的倍数(其实,由不断的j-k我们可以联想到更相减损法(gcd的一种求解方法,另一种是辗转相除法)),这样的话,我们只要判断n以内gcd(a,b)的倍数的奇偶性,就可以知道是谁获胜了。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
    while(b)
    {
        int c=a%b;
        a=b;
        b=c;
    }
    return a;
}
int main()
{
    int t,k=1;
    scanf("%d",&t);
    while(t--)
    {
        int  n,a,b;
        scanf("%d%d%d",&n,&a,&b);
        int x=gcd(a,b);
        n/=x;
        n-=2;
        if(n%2==0)
        {
            printf("Case #%d: Iaka\n",k++);
        }
        else
        {
            printf("Case #%d: Yuwgna\n",k++);
        }
    }
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值