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

来源:互联网 发布:js数字转字符串 补0 编辑:程序博客网 时间:2024/05/16 06:46

题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5512

题目:
Pagodas

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 518 Accepted Submission(s): 384

Problem Description
n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, labelled from 1 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 labelled i (i∉{a,b} and 1≤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" orIaka”). 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

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

讲道理的话,还是我们太菜了,英语渣渣。
题意:
Yuwgna 和 Iaka 两个和尚,修复古塔,分别从a和b开始修,Yuwgna 先修,修复的塔号i = j+k || i = j-k, 开始的时候对k和j挺懵逼的,j和k分别是已经修复好了的古塔,最后谁不能修复古塔了,谁输(不能重复修复古塔),输出赢家
思路:
a==1和a ,b互质是一样的,n个古塔都能修复,所以谁是赢家则取决于n是奇数还是偶数;
a != 1, 并且 a和b不互质,那么一共可以修复的古塔为n/gcd(a, b),最后谁是赢家还是取决于n/gcd(a, b)的奇偶性。

还是自己太菜了。

#include <iostream>using namespace std;int gcd(int a, int b){    if(b == 0)    {        return a;    }    else{        gcd(b, a%b);    }}int main(){    int t;    int k = 1;    cin >> t;    while(t--)    {        int n, a, b;        cin >> n >> a >> b;        cout << "Case #" << k++ << ": ";        if(a == 1 && gcd(a, b) == 1)        {            if(n % 2 == 0){                cout << "Iaka" << endl;            }            else{                cout << "Yuwgna" << endl;            }        }        else        {            int cnt = n / gcd(a,b);            if(cnt % 2 == 0){                cout << "Iaka" << endl;            }else{                cout << "Yuwgna" << endl;            }        }    }    return 0;}

路漫漫其修远兮
吾将上下而求索

只想为你成为更好的人,静静的生活。

0 0