1. 程式人生 > >【思維】【GCD】HDU 5512 Pagodas

【思維】【GCD】HDU 5512 Pagodas

【題意】兩個人往集合中放數,放的數是已經有的數其中兩個數的和或者差,放的數不能小於1或大於n,放下最後一個數的人獲勝,給出n和最初在集合中的2個數,問誰獲勝。

【思路】用兩個數反覆做和差,最後總會出現一個等差數列,也就是說這個遊戲並沒有策略,無論怎麼玩結果都會是既定的。這個等差數列的公差就是gcd(a,b),然後求出這個等差數列的項數,它的奇偶性就是答案。

【程式碼】

#include<bits/stdc++.h>
#define fuck(x) std::cout<<"["<<#x<<"->"<<x<<"]"<<endl;
using namespace std;
typedef long long ll;

const int M=2e5+5;
const int inf=1e9+5;

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

int main()
{
    int _,cas=0;
    scanf("%d",&_);
    while(_--)
    {
        cas++;
        int n;
        int a,b;
        scanf("%d%d%d",&n,&a,&b);
        if(n/gcd(a,b)%2==0)
            printf("Case #%d: Iaka\n",cas);
        else
            printf("Case #%d: Yuwgna\n",cas);
    }
    return 0;
}