Official

F - Paired Wizards Editorial by m_99


\(X\) が魔法 \(2\) を使う回数が \(C_X\) で、早いほうから \(x_1,x_2,\ldots,x_{C_X}\) 番目に使うものとします。この時、\(x_i\) 番目に使用した魔法でモンスターに与えるダメージは \(x_i - i\) です。よって、\(S_X=\sum{x_i}\) とすると \(X\) がモンスターに与えるダメージの総和は \(S_X - \frac{C_X(C_X+1)}{2}\) です。
同様に \(Y\) についても \(C_Y,S_Y\) を考えると、本問の目的は \(S_X+S_Y-\frac{C_X(C_X+1)}{2} -\frac{C_Y(C_Y+1)}{2}\) の最大化となります。

\((a_i,b_i,c_i,d_i)\) を、各魔法使いが使う魔法が一意かどうか等に注目して以下の \(5\) つのパターンに分類します。

  1. \(X,Y\) ともに一意でなく、\(X\)\(Y\) で使う魔法が異なる
  2. \(X,Y\) ともに一意でなく、\(X\)\(Y\) で使う魔法が同じ
  3. \(X\) は一意で \(Y\) は一意でない
  4. \(X\) は一意でなく\(Y\) は一意
  5. \(X,Y\) ともに一意

使う魔法が一意な箇所における \(C_X,C_Y,S_X,S_Y\) への影響は一定です(この時点で \(5\) 番目のパターンは任意性が無いものとして考慮不要になります)。一意でない部分をどのように決めるかを探索します。
\(1\) 番目のパターンでは \(X,Y\) のうちちょうど一方が魔法 \(2\) を使います。ここで、\(S_X+S_Y\) への影響は魔法の使い方によらず一定で、\(C_X,C_Y\) への影響を考えると \(X,Y\) がそれぞれ魔法 \(2\) を何回使ったかのみが重要です。\(X\) が何回魔法 \(2\) を使うかを決めたら残りの魔法 \(2\)\(Y\) が使うため、この探索は \(\mathrm O(N)\) で可能です。
\(2\) 番目のパターンでは、\(X,Y\) が魔法 \(2\) を使う回数を \(k\) とすると遅いほうから \(k\) 回使うのが最適です。なぜなら、 \(C_X,C_Y\) への影響が変わらない以上 \(S_X,S_Y\) への影響のみを考えればよく、これらはより大きい方がダメージの総和が大きくなるためです。回数 \(k\) を全探索することでこのパターンについての探索も \(\mathrm O(N)\) で可能です。
\(3,4\) 番目のパターンも \(2\) 番目と同じ理由でそれぞれ \(\mathrm O(N)\) で探索出来るため、この時点で \(\mathrm O (N^4)\) の全探索解法が得られます。

\(1,2\) 番目のパターンの魔法の使い方を固定したとき、\(3,4\) 番目でどのような魔法の使い方をするのが最適かは独立に考えることが出来、さらにこれは \(C_X,C_Y\) の値に依存します。よって、\(C_X=0,1,2,\ldots\) 及び \(C_Y=0,1,2,\ldots\) に対して \(3,4\) 番目のパターンの最適な魔法の使い方を前計算しておくことで全探索が \(\mathrm O(N^2)\) に改善され、正答することが出来ます。

posted:
last update: