アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC437D - Sum of Differences

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

愚直に和を計算すると、MN回の計算が必要でTLE。
よって、高速化を考える必要がある。

絶対値を「大きい方を足して小さい方を引く」と考える。
Aのそれぞれの値は、「Bの中で自分より大きい数の分だけ引き算して、自分より小さい数の分だけ足し算する」ということになる。
Bの方も同様。
(AとBに同じ数があった場合は、両方を無視するか、適当なルールで大小をつける)
すると、AとBの組み合わせごとMN回ではなく、AのそれぞれごととBのそれぞれごとのM+N回の処理でいけることになる。

実装方法はいくつかあるが、AとBそれぞれをpriority_queue※につめて、2つのtopの値が大きい方に処理していくのが楽か。
この場合、今の相手のpriority_queue※のサイズを見れば、何回足して何回引くかをすぐに求められるし、同じ数があった場合のタイブレークも自然に組み込まれる。

答えはmod998244353での値なので、剰余類環も参照。

解答例


注意点


別解

タグ:

剰余類環
最近更新されたスレッド
ウィキ募集バナー