9.10 偏见
D - Least Unbalanced
考虑逆过程,即序列从 \(1\) 拓展到 \(2 ^ n\)。可以保证过程中序列有 \(3\) 种情况:
-
\(\max(A) = \min(A)\)
-
\(\max(A) = \min(A) + 1 = 2m + 1\)
-
\(\max(A) = \min(A) + 1 = 2m\)
显然 \(3\) 种情况能互相转化,这说明答案只能是 \(0\) 或 \(1\)。
int n, k;
void dfs(int dep, int val) {
if (dep == 0) return write(val, ' '), void();
dfs(dep - 1, val >> 1);
dfs(dep - 1, val - (val >> 1));
}
int main() {
read(n, k);
if (k % (1 << n)) puts("1");
else puts("0");
dfs(n, k);
return 0;
}
oi 学了200年都不会想到递归输出和数学归纳的傻子
浙公网安备 33010602011771号