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
" 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
Case
Case
Case
Case
Case
Case
Case
Case
Case
Case
Case
Case
Case
Case
Case
这道题就是说有n个塔,最先开始有a,b两个塔,然后Yuwgna先手建一个新的塔,这塔的位置必需是
i=
j+k或者
i=
j-k,
这个条件很重要,有这个条件我们可以得出每次建塔的位置都是
gcd(
j,k),其实判断是可以建完所有塔的,所以判断
abs(n/
gcd(a,b))是奇数还是偶数就可以了,涨一下姿势。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<ctime>
#include<string>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#include<set>
#include<map>
#include<cstdio>
#include<limits.h>
#define MOD 1000000007
#define fir first
#define sec second
#define fin freopen("/home/ostreambaba/文档/input.txt", "r", stdin)
#define fout freopen("/home/ostreambaba/文档/output.txt", "w", stdout)
#define mes(x, m) memset(x, m, sizeof(x))
#define Pii pair<int, int>
#define Pll pair<ll, ll>
#define INF 1e9+7
#define inf 0x3f3f3f3f
#define Pi 4.0*atan(1.0)
#define lowbit(x) (x&(-x))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max(a,b) a>b?a:b
typedef long long ll;
typedef unsigned long long ull;
const double eps =
1e-12;
const int maxn =
3000;
using namespace std;
inline int read(){
int x(
0),f(
1);
char ch=getchar();
while (ch<
'0'||ch>
'9') {
if (ch==
'-') f=-
1;ch=getchar();}
while (ch>=
'0'&&ch<=
'9') x=x*
10+ch-
'0',ch=getchar();
return x*f;
}
inline int gcd(
int a,
int b){
return b?gcd(b,a%b):a;
}
int main()
{
int t=read();
int n,a,b;
for(
int i=
1;i<=t;++i){
scanf(
"%d%d%d",&n,&a,&b);
printf(
"Case #%d: ",i);
int ans=
abs(n/gcd(a,b));
if(ans&
1){
printf(
"Yuwgna\n");
}
else{
printf(
"Iaka\n");
}
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-8047.html