思路是对于每场比赛的两个人, 如果强的那个打不过1号就让强的赢,否则支持弱的。
过了其他帖的hack数据,但只有20pts。WA了sub3的2,3,sub4,5,6的1
#include <bits/stdc++.h>
using namespace std;
#define RI register int
const int N = (1<<18)+1;
inline int read() {
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())x=x*10+c-48;
return x*f;
}
int T,k,m,a[N];
bool f;
int n;
bool solve() {
if( n == 1 ) return 0;
if( a[1]+m < a[2] ) { f = 1; return 0; }
for(int i = 3; i < n; i += 2) {
if( a[i] > a[i+1] ) swap(a[i],a[i+1]);
if( a[i+1] <= a[1]+m ) swap(a[i],a[i+1]);
a[i+1>>1] = a[i]+m>=a[i+1] ? a[i] : a[i+1];
}
n>>=1;
return 1;
}
int main() {
freopen("a.in","r",stdin);
T=read();
while( T-- ) {
k=read(),m=read()+1; n = 1<<k; f = 0;
for(RI i = 1; i <= n; ++i) a[i]=read();
while( solve() );
puts(f ? "Yoshino" : "Kotori");
}
return 0;
}