AGC036 C - GP 2
解法
まず、最終的な数列の中に奇数が個存在するときについて考えます。は最大でとなります。
すると、残ったに1加算する操作を2つまとめて、に2加算する操作回分に置き換えることができます(もちろん、残った回数が奇数の際は端数が発生するので、考慮せずスルーします)。
すると、個の奇数を選ぶのは、で求めることができます。そして、に2加算する操作回を個の数字に割り振るのは、で求めることができます。
基本的にはこれでよいのですが、いくつか実現不可能なパターンが存在します。の制限があるためです。
これは主に2つのパターンがあります。数列のどこか1つが以上の奇数パターンと、以上の偶数パターンです。どちらのパターンも、そのような数字が同時に2個以上出現することはありません(全体の総和がにしかならないからです)。
以上の奇数パターン
仮にがその値だったと仮定して、最後に倍してあげることで網羅できます。が奇数なので、それ以外に個の奇数が存在するはずです。この割り振り方は、通りです。
そして、2を加算する操作は、回だけ残っています(少なくとも回はに割り振らなければなりませんが、それ以外はどこに割り振ってもいいです)。よって、割り振り方は通りとなります。以上の偶数パターン
1つめのパターンと同様に考えると、奇数の割り振りはとなります。
2を加算する操作の割り振りは、となります。今回は、に少なくとも回割り振る必要があるので、残る回数は回です。
あとは、最初に計算した全体から、実現不可能なパターンを引けばよいです。
となります。
これを全てのに対して計算を行い、総和を求めれば答えとなります。
感想
奇数の個数を決め打ちして、2に加算する回数にまとめてしまう、という考え方が天から降ってきました(わーい)。
実現できないコーナーケースを見つけて、冷静に対処できたのも良かったです。