L - Unique Sheet 解説
by
keisuke6
整数 \(a (1 \leq a \leq (N-K)^2)\) のうち、\(A\) に一度も出現しない要素があった場合、答えは明らかに \(0\) になります。以降、全ての整数 \(a (1 \leq a \leq (N-K)^2)\) は \(A\) に一度以上出現することを仮定します。
それぞれの \(2\) つの操作で削除する列/行の集合を全て探索する \(O(\binom{N}{K}^2)\) 解法がありますが、\(N=1000, K=5\) において \(\binom{N}{K}^2 \fallingdotseq 6.8 \times 10^{25}\) となるため、これは TLE してしまいます。無駄な 行/列 の探索を減らすことで高速化することを試します。いくつかの高速化アイデアがあるので、順に解説します。
アイデア 1 :\(A\) のうち一度しか現れない要素は削除してはいけない
タイトルの通りです。そのような要素が含まれる行や列を削除してしまうと、最終的な \(A\) は必ず条件を満たさなくなってしまいます。これにより、削除する行/列をある程度削減することができます。
具体的には、この削減により \(N=1000, K=5\) の場合は探索すべき行と列の個数をそれぞれ \(10\) 個まで減らすことができます。\((\binom{10}{5})^2 = 252^2 = 63504\) より、\(1\) つの操作方法に対して \(O(N)\) で条件を満たすかを判定すれば、\(N\) が大きいケースでは AC を得ることができます。
しかしながら、例えば \(N = 17, K = 5\) の場合、このアイデアのみだと削除される列と行の候補を減らすことができないようなケースが存在します(\(1\) 以上 \((N-K)^2=144\) 以下の整数を全て \(2\) 度以上出現させた場合です)。そこで、次のような改良アイデアを考えてみます:
アイデア 2 :\(A\) で削除する行を決め打った後、実際削除した後の行列を \(A'\) としたとき、\(A'\) のうち一度しか現れない要素は削除してはいけない
例えば \(N=17, K=5\) の場合 \(A'\) の要素数は \(12 \times 17 = 204\) となります。ここで、\(A'\) に \(1\) 度しか出現しない要素として考えられるものは最低でも \(204-144=60\) 個あります。よって、削除する行として考えられるものは \(\binom{10}{5} = 252\) 通りしかありません。これにもともとの行の探索の通り数 \(\binom{17}{5} = 6085\) 通りを掛けても、判定に \(O(N)\) 掛けている場合そこまで判定にコストがかからないことから、十分高速に求めることができます。
以上のアイデアより、\(N\) が大きい場合と \(N\) が小さい場合でそれぞれアイデア 1⁄2 を適用することによって、十分高速に AC を得ることができます。
実装によっては他の定数倍高速化アイデア(全体に \(2\) つしか出現しない要素は両方削除してはいけないという制約の中で削除する行や列を決めるなど)をしないと AC を得ることができない可能性もあります。
投稿日時:
最終更新:
