求助贪心
查看原帖
求助贪心
236866
401rk8楼主2021/2/10 11:16

思路是对于每场比赛的两个人, 如果强的那个打不过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;
}
2021/2/10 11:16
加载中...