きろく

特筆すべき記録のまとめ

AtCoder Beginner Contest 117:D - XXOR

問題

atcoder.jp

解法

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).

解答

atcoder.jp

AND の答えは必ず 1 か 0 などといった変な思い込みからバグらせていた.

f:id:babcs2035:20190211222702p:plain