Pagodas
曾经在燕山和彤山的中央,有 n 座古塔矗立在尼姑寺,从 1 标号至 n。然而只有其中的两座(标号为 a 与 b, 满足 1 ≤ a < b ≤ n)承受住了时间的考验。
有两个和尚,分别叫做 Yuwgna 和 Iaka,想让其重现佛光,便决定轮流修建古塔,Yuwgna 执先。对于每一个回合,其中一个人可以选择修建编号为 i (i∉{a,b},1 ≤ i ≤ n)的古塔,对于编号 i 应满足:设现有两古塔编号为 j 与 k ,则 i=j+k 或 i=j-k。每一座古塔不能建造两次。
视其为一个游戏,当某一个和尚不能再建造新塔时视为游戏失败,同样的,另一个和尚获得胜利。
Input
第一行输入一个数 t (1≤ t ≤ 500) 代表着将要测试的样例数。
对于每一个例子,第一行输入一个 n (2≤ n ≤ 20000) 并且跟着两个数 a 和 b。
Output
对于每一个例子,输出胜者 (Yuwgna" 或
Iaka”)。假设他们每次都会做出最佳决定。
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
题意:两个和尚建造塔,对于任意的 j 和 k ,假设 j > k , 下一个建造塔的位置一定是在j + k 或 j - k 的位置上,轮流建造,谁建不了了谁就输了。
分析:j + k 和 j - k 都是gcd(j,k) 的倍数,而且 j + k - j 和 j + k + j 也都是gcd(j,k)的倍数,所以能看出能建造的塔的位置都是 j 和 k 的倍数,所以咱们只要求出有多少个这样的数再看奇偶性就行了
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int t;
cin>>t;
for(int i=1;i<=t;i++){
int a,b,n;
cin>>n>>a>>b;
if(n/__gcd(a,b)%2 == 0) printf("Case #%d: Iaka\n",i);
else printf("Case #%d: Yuwgna\n",i);
}
return 0;
}