为什么这份代码连样例都没过却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");
}
}