AtCoder Beginner Contest 117:D - XXOR
問題
解法
K の i bit 目を K_i,K より小さい数 X の i bit 目を X_i とすると,
K_40 = X_40
K_39 = X_39
...
K_i > X_i (0 <= i <= 40)
となる.ここで,X_(i - 1), X_(i - 2), ... , X_0 は 0 でも 1 でもよい(K との大小に影響しない).また,X_i は必ず 0 になる.
これを踏まえると,各 i について X の 0 ~ (i - 1) bit 目は f(X) を最大化するように決められることが分かる.具体的には,各 A について k bit 目が立っている数を cnt_k とすると,cnt_k < (N - cnt_k) ならば X_k を 1 にすべきで,そうでなければ X_k を 0 にすべきである.各 i について f(X) の最大値が求まるので,これらの最大値の最大を答えにすればよい.O(N * (logK)^2).
解答
AND の答えは必ず 1 か 0 などといった変な思い込みからバグらせていた.