ARC229 F - Angst for All Pairs 2

全ペアへの苦悩2

考え方

まず、$1$ と $2$ を選んだら条件違反になるケースを考える。

すぐに思いつくのは、$1$ も $2$ もどこにもないケース。
これは明らかに違反している。

さらに、$1$ があるのに違反しているケースもある。
この場合、$1$ があるカードを選んでも違反なのだから、$2$ もそのカードにあるはず。
すると $2$ が書いてあるカードが存在することになり、逆のこともいえる。
つまり、$1$ または $2$ が書いてあるカードが全て $1$ と $2$ の組であると条件違反である。
とはいえ、全く同一のカードを $2$ つ用意する意味はない。
したがって、実質的に、唯一の $1$ と唯一の $2$ が同じカードに書かれている場合ということになる。
これが、$1$ と書かれたカードがあるのに条件違反になる唯一のケース。

そして、この $2$ つ以外はどんな場合でも $1$ と $2$ を選んだら条件違反になるケースはない。
ということは、条件は以下のように言い換えることができる。

この言い換えをしたうえで、最小コストを考えよう。

ソートをすることで、数が小さい方がコストが少ない(あるいは等しい)と思ってよい。
その前提で、いくつかの貪欲法が成立する。

まず、$2$ 以上の数を $3$ 回以上使う意味はない。
そのうち $1$ つを $1$ に変えれば、条件を壊さずに結果を同等以上にできる。

さらに、コスト最大の数を $1$ 回以上使う意味もない。
他に未使用の数があればその数に、なければ $1$ に変えれば、条件を壊さずに結果を同等以上にできる。

そして、$2$ を $1$ 回しか使わないのに $3$ を $2$ 回使うようなものも考えなくてよい。
この場合、$2$ と $3$ をまるごと入れ替えれば、条件を壊さずに結果を同等以上にできる。

ということで、$2$ 以上の使用回数を数列にすると、途中まで $2$、途中から $1$、最後だけ $0$ という列になる。
この貪欲条件を採用すると、あり得るパターンは限られる。

例えば数が $11$ までだとしよう。
使用回数が $\{?,1,1,1,1,1,1,1,1,1,0\}$ なら、唯一同士を組にできないので以下のようになる。

カード1 カード2 カード3 カード4 カード5 カード6 カード7 カード8 カード9
表 $1$ $1$ $1$ $1$ $1$ $1$ $1$ $1$ $1$
裏 $2$ $3$ $4$ $5$ $6$ $7$ $8$ $9$ $10$

使用回数が $\{?,2,1,1,1,1,1,1,1,1,0\}$ なら、以下のようになる。

カード1 カード2 カード3 カード4 カード5 カード6 カード7 カード8
表 $1$ $1$ $1$ $1$ $1$ $1$ $2$ $2$
裏 $3$ $4$ $5$ $6$ $7$ $8$ $9$ $10$

使用回数が $\{?,2,2,1,1,1,1,1,1,1,0\}$ なら、以下のようになる。

カード1 カード2 カード3 カード4 カード5 カード6 カード7
表 $1$ $1$ $1$ $2$ $2$ $3$ $3$
裏 $4$ $5$ $6$ $7$ $8$ $9$ $10$

つまり、$2$ 以上の安い方から順に、$1$ を $3$ つ消してその数を $1$ 増やすことができると考えられる。
これは $1$ の残り個数が $2$ 個以上残る範囲で実行できる。

よって、この調査で最小値を探せばよい。
凸関数であるため、$2$ 回使用の個数が少ない順に調査し、最小値記録更新失敗した時点で打ち切ってよい。

これで解答……と思いきや、コーナーケースが存在する。
$N=2$ の場合には、この方法ではカードが $0$ 枚ということになってしまう。
よって、$1-1$ のペアを $1$ 枚特別に用意する必要がある。
$N=3$ の場合には、この方法だと $1-2$ ペア $1$ 枚だけになって条件違反。
よって、$1-1$ のペアを $1$ 枚特別に用意する必要がある。
これらの対応をすれば完了。

計算量はソート部分が支配的で $O(N\log N)$ である。

入力例1での動作

入力例1の $1$ 番目と $3$ 番目のテストケースを考える。

まず、$1$ 番目のテストケースを考える。

入力を受け取る。

n: 3
a: {3, 2, 5}

コストを昇順にソートすると $\{2,3,5\}$ となる。

通常の形では、最大コストの数を使わず、中央のコスト $3$ を $1$ 回、最小コスト $2$ を $N-2=1$ 回使う。
この時点のコストは $3+2=5$ である。

しかし、$N=3$ ではこれだけだと、使用回数が $1$ 回の数同士だけを組にしたカード $1$ 枚になってしまう。
そこで最小コストの数を両面に書いたカードを $1$ 枚追加する。
追加コストは $2\times2=4$ なので、答えは $5+4=9$ となる。

次に、$3$ 番目のテストケースを考える。

入力を受け取る。

n: 7
a: {12, 42, 21, 10, 29, 33, 18}

コストを昇順にソートすると $\{10,12,18,21,29,33,42\}$ となる。

まず、最大コスト $42$ の数を $0$ 回、最小コスト $10$ の数を $N-2=5$ 回、残りを $1$ 回ずつ使う。
コストは $12+18+21+29+33+10\times5=163$ である。

ここから、最小コスト $10$ の数 $3$ 回の代わりに、次に安いコスト $12$ の数をもう $1$ 回使うことを考える。
コストは $10\times3=30$ から $12$ になるため、$18$ 改善する。

したがって、答えは $163-18=145$ となる。

注意点

答えは int 型からはみ出る。
long long 型を用いること。

別解

特になし。