思路:扩展中国剩余定理+斐波那契博弈
斐波那契博弈
扩展中国剩余定理
/*9.7徐州 A*/
#include <stdio.h>
typedef long long ll;
#pragma GCC optimize(3)
#pragma comment(linker,"/STACK:102400000,1024000")
/*中国剩余定理板子*/
bool flag = false;
ll a1,a2,n1,n2;
int n;
ll f[105];
ll b[1000001],a[1000001];
void exgcd(ll a, ll b, ll& g, ll& x, ll& y)
{
if (b == 0){
g = a;
x = 1;
y = 0;
return;
}
exgcd(b,a%b,g,y,x);
y -= (a/b)*x;
}
void china(){
ll d =a2-a1;
ll g,x,y;
exgcd(n1,n2,g,x,y);
if (g != 0 && d%g == 0){
x = ((x*d/g)%(n2/g)+(n2/g))%(n2/ g);
a1 = x*n1+a1;
n1 = (n1*n2)/g;
}else
flag = true;
}
ll realchina(){
a1 = b[0];
n1 = a[0];
for (ll i = 1; i < n; i++){
a2 = b[i];
n2 = a[i];
china();
if (flag)
return -1;
}
return a1;
}
int main()
{
scanf("%lld",&n);
flag = false;
f[0] = f[1] = 1;
for(ll i = 2;i < 100;i++){
f[i] = f[i-1]+f[i-2];
}
for (int i = 0; i < n;i++)
scanf("%lld%lld",a+i,b+i);//x%ai = bi
ll ans = realchina();
if (ans == -1){表示没有解
printf("Tankernb!\n");
return 0;
}
for(ll i = 1;i < 80;i++){
if(f[i] == ans){
printf("Lbnb!\n");
return 0;
}
}
printf("Zgxnb!\n");
return 0;
}