程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 5512 Pagodas(沈陽區域賽重現)

hdu 5512 Pagodas(沈陽區域賽重現)

編輯:C++入門知識

hdu 5512 Pagodas(沈陽區域賽重現)


Pagodas

Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 446Accepted Submission(s): 331 Problem Description n\ pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, labelled from1\ to n\. However, only two of them (labelled a\ and b\, where 1≤a≠b≤n\) 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 labelledi(i?{a,b}and1≤i≤n)\ if there exist two pagodas standing erect, labelled j\ and k\ respectively, such that i=j+k\ or i=j?k\. 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 t(1≤t≤500)\ which is the number of test cases.
For each test case, the first line provides the positive integer n(2≤n≤20000)\ and two different integers a\ and b\.
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

題目大意:先輸入一個t,表示有t組測試數據。接下去t行,每行有n a b 分別表示有n個塔,a,b就是題目中敘述的j和k,(j和k表示的是已經修好的塔的編號)。Yuwgna先開始進行修塔,最後沒得修的就輸了。需要注意的是每次可以進行修建的塔需要滿足i=j+k或者i=j-k。
解題思路: 1、先判斷一下a和b中是否存在1,如果存在的話,任何一個塔都可以進行修建。 2、如果a和b中不存在1,就判斷一下a和b是否互質,如果互質的話,肯定會出現1的情況,這樣又可以每一個塔都可以修建。 3、不互質的話,可以修建塔的位置的個數就只有n/gcd(a, b);然後最後判斷總共可以修建的塔的個數是奇數還是偶數就ok了。 詳見代碼。
#include 
#include 
#include 

using namespace std;

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved