萌新求助
查看原帖
萌新求助
121908
mcyqwq楼主2021/2/13 21:06

为什么这份代码连样例都没过却AC了(

分治法 参考的是最后一篇题解

提交记录link

代码如下

#include <cstdio>
#define max(a, b) (a > b ? a : b)

const int N = (1 << 18) + 5;

int T, n, m, k, a[N];

#define mid (l + r >> 1)
int find(int l, int r, int x) {
	if(l == r) return a[l] <= x ? a[l] : 0;
	int lson = find(l, mid, x), rson = find(mid + 1, r, x);
	if(lson && rson) return max(lson, rson);
	if(lson) return find(mid + 1, r, lson + m) ? lson : 0;
	if(rson) return find(l, mid, rson + m) ? rson : 0;
	return 0;
}
#undef mid

bool solve(int x) {
	if(x == 1) return 1;
	if(!solve(x >> 1)) return 0;
	return find((x >> 1) + 1, x, a[1] + m);
}

int main() {
	scanf("%d", &T);
	while(T--) {
		scanf("%d%d", &k, &m);
		for(int i = 1; i <= (1 << k); i++) scanf("%d", a + i);
		if(solve(1 << k)) puts("Kotori");
		else puts("Yoshino");
	}
}
2021/2/13 21:06
加载中...