解法
明らかに、得点の和が高いペアから順番に握手をしていくのが最適です。
ある得点が達成できるとすると、明らかに
未満の任意の得点
は、全く同じ手を選ぶことで達成でき、達成できないときは
以上の得点はどう頑張っても達成できないので、
以上の得点を達成できるか
について単調性が存在します。
このについて二分探索をしたいのですが、うまくいきません(僕はいきませんでした)。ので、少し見方を変えます。
得点の和が高いペアから順番に握手をしていくのが最適だったので、ある得点について、
以上となるペアについては握手を行い、
未満となるペアについては握手をしない
という区切り目が存在するはずです。
以上となるペアの個数が
個以上になると、
回握手することができます。
以上となるペアの個数についても、
が減少すれば個数が増加し、単調性が存在しています。ので、
以上となるペアの個数が
以上になる
ような、最大のを二分探索で求めることができます。
すると、その以上のペアの総和を求めればよいです。
片手がのとき、もう片方の手は、
以上の
を選ぶことができます。この
の個数は、
が降順ソートされていれば、二分探索で求めることができます。
これにより、ペアの個数を求めることができました。
総和についてもほぼ同様で、から
までの総和と、
の総和を全ての
について足したものになります。
これは、後者についてはそのまま個数をかければよく、前者については累積和をあらかじめ計算しておくことで、高速に計算することができます。
あとは、コーナーケースである、
以上となるペアの個数がぴったり
ではなかった場合
についての差分を計算すればよいです(サンプル2参照)。
得点の和が以上となるペアは
個未満になってしまうはずなので、今
以上となるペアの個数が
個あるとしたときに、総和から除くべき
個のペアは、得点が
となっているものについてです。
ということで、を、全体の総和から引いてあげれば求める答えとなります。
感想
見るからに二分探索をしたいなぁ、と思っていたのですが、うまく二分探索をする方法を考えるのに詰まってしまいました。
見方の変え方が課題です。