D - Can I Press Them All? Editorial
by
AngrySadEight
別解
まず,\(M = 1\) のときの答えの求め方について考えましょう.
点の座標 \(x_{1, 1}, \dots, x_{N, 1}\)を昇順に並べたものを,\(y_1, y_2, \dots, y_N\) とします.このとき,これらの座標上の点が \(S_1\) と \(S_2\) のうちどちらの集合に属するかに関する条件を考えます.
まず,\(y_N - y_1 \leq D\) の場合は,どの点についても,\(S_1\) と \(S_2\) のどちらにも属することが可能です.逆に,\(y_N - y_i > D, y_i - y_1 > D\) を両方とも満たす \(i\) が存在する場合,条件を満たす \(S_1, S_2\) に関する割り当ては存在しません.
以上のどちらにも該当しない場合について考えます.この場合,座標 \(y_i\) にある点について次のことが成り立ちます.
- \(y_N - y_i > D\) を満たす場合,座標 \(y_1\) にある点と同じ側に属さなければならない.
- \(y_i - y_1 > D\) を満たす場合,座標 \(y_N\) にある点と同じ側に属さなければならない.
- 上記のいずれも満たさない場合,どちらにも属することができる.
座標 \(y_1, y_N\) 上の点が \(S_1, S_2\) のどちらに属するかを固定すれば,割り当て方の個数は「どちらにも属することができる」点の個数を \(q\) として \(2^q\) となります.座標 \(y_1\) にある点と座標 \(y_N\) にある点は明らかに異なる側に属するため,この \(2\) つの座標にある点がそれぞれ \(S_1, S_2\) のどちらに属するかを両方試せばよいです(\(1\) 次元の場合は冗長に思われるかもしれませんが,今後の説明のためあえて両方試しています).
\(M \geq 2\) の場合も,同様のアプローチをとることで答えを求めることができます.
\(M \geq 2\) の場合,\(\sum_{i=1}^M|x_{a, i} - x_{b, i}| \leq D\) という条件は扱いにくいので,変数変換を行うことにします.例えば \(M = 2\) の場合は \(X_{i, 1} = x_{i, 1} + x_{i, 2}, X_{i, 2} = x_{i, 1} - x_{i, 2}\) となるように,\((x_{i, 1}, x_{i, 2}) \rightarrow (X_{i, 1} , X_{i, 2})\) という変換を行うことで,式変形によって \(\max_{1 \leq i \leq 2}(X_{a, i} - X_{b, i}) \leq D\) という条件に帰着させることができます.一般の \(M\) についても同様にして,\(X_{i, k} = \sum_{j = 1}^Mc_j x_{i, j}\)(ただし,\(c_j\) は \(j = 1\) のとき \(c_j = 1\),\(j \geq 2\) のとき \(k\) の \(2\) 進表記における \(2^{j - 2}\) の位が \(1\) ならば \(1\),そうでなければ \(-1\) とする) というように,\(M\) 次元から \(2^{M - 1}\) 次元への変換を行うことにより,和に関する条件を \(\max\) に関する条件に置換することができます(\(M = 2\) の場合特に 45度回転 と呼ばれます).
さて,\(\max\) に関する条件 \(\max_{1 \leq i \leq 2^{M - 1}}(X_{a, i} - X_{b, i}) \leq D\) に置換することができれば,各次元に対して \(M = 1\) のときの議論を適用することができます.各次元のそれぞれについて,座標が最大・最小の点が \(S_1, S_2\) のどちらに属するかを固定することで,\(M = 1\) のとき同様,各点に \(S_1, S_2\) のどちらに属するかの条件を付与することができます.(ある \(j\) について \(\max_{1 \leq k \leq N}(X_{k, j}) - \min_{1 \leq k \leq N}(X_{k, j}) \leq D\) が成り立つ場合,その \(j\) に対応する次元は一切考えないものとみなします.逆に,ある \(j\) について \(\max_{1 \leq k \leq N}(X_{k, j}) - X_{l, j} > D, X_{l, j} - \min_{1 \leq k \leq N}(X_{k, j}) > D\) が成り立つ \(l\) が存在する場合は,条件を満たす割り当ては存在しないので答えは \(0\) とします.)
各次元について座標が最大・最小の点が \(S_1, S_2\) のどちらに属するかの,高々 \(2^{2^{M - 1}}\) 通りすべてに対して以上を考え,それらを足し合わせることで答えが求まります.計算量は \(O(2^{2^{M - 1} + M}N)\) であり,本問の制約下では十分高速に動作します.
posted:
last update:
