思维hdu 5512(Pagodas)

    xiaoxiao2026-09-11  0

    Pagodas

    Description

     pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, labelled from   to  . However, only two of them (labelled   and  , where  ) withstood the test of time.  Two monks, Yuwgna and Iaka, decide to make glories great again. They take turns to build pagodas and Yuwgna takes first. For each turn, one can rebuild a new pagodas labelled   if there exist two pagodas standing erect, labelled   and  respectively, such that   or  . Each pagoda can not be rebuilt twice.  This is a game for them. The monk who can not rebuild a new pagoda will lose the game.

    Input

    The first line contains an integer   which is the number of test cases.  For each test case, the first line provides the positive integer   and two different integers   and  .

    Output

    For each test case, output the winner (``Yuwgna" or ``Iaka"). Both of them will make the best possible decision each time.

    Sample Input

    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

    Sample Output

    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

    题意:给出n个塔,a,b是修过的,接下来只能修编号(a+b)或者(a-b),两人轮流,问谁能赢。

    题解:看到两人轮流就想到了gcd,(类似轮流拆数字)不过限制条件是i=a+b,i=a-b,一开始没想通。其实还是求gcd(a,b),虽然a,b一直在变,但都是基于最初的a,b.证明

    <span style="font-size:18px;">#include<cstdio> #include<cstring> using namespace std; int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } int main(){ int t,n,a,b,cas=1;; scanf ("%d",&t); while (t--){ scanf ("%d %d %d",&n,&a,&b); printf ("Case #%d: ",cas++); int s=n/gcd(a,b); if (s&1) printf ("Yuwgna\n"); else printf ("Iaka\n"); } return 0; } </span>

    转载请注明原文地址: https://ju.6miu.com/read-1311974.html
    最新回复(0)