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

来源:互联网 发布:md5如何计算知乎 编辑:程序博客网 时间:2024/05/21 09:47

题意: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
原创粉丝点击