問題はこちら
問題概要
0,1からなる長さの2つの数列に対し, 関数を以下のように定める.
に対し以下の操作を繰り返してと等しくすることを考える. このとき行う操作のコストの和として考えられる最小の値がである.
- を(0から1, もしくは1から0に)変更する. この操作のコストは, 変更の直前にであったような整数の個数をとして, である.
全てのの組に対しての和をで割った余りを求めよ.
思考の流れ
変更する順番はの小さい方からやるのがいいのはすぐわかる.
しかし, 考えるべきの組み合わせは, 通りある.
「全列挙できない場合は寄与分を考える」を使えそう.
今回は各が何回足されるかを考える.
がソートされているとして, 自分の後ろにある変更しなければならないの個数分足される. を一つ決めた時にとが以降で異なっている位置の数が個であるようなものの数は個ある. つまり, 一つに対して
あるので, 求める答えは
これをwolframalphaになげると
となり, で求められる.
提出プログラム
https://atcoder.jp/contests/abc150/submissions/12542834
感想
wolframalphaはコンテスト前に開いておきましょう.