AtCoder Beginner Contest 267 Ex問題 Odd Sum
問題
提出解答
問題の概要
個の整数 の中から奇数個選び, 和を にする選び方の数を求めよ.
制約
解法
制約から, である.
まず, ならば, 答えは明らかに なので, 以降は であると仮定する.
このとき, と の値によって, 次のように を定める.
- のとき
- のとき
- が偶数ならば , が奇数ならば
このとき, の中から和が になり, 選んだ個数を で割った余りが であるような選び方の数を求めることにする.
沢山の整数の中からいくつか選んで決まった和になる選び方を求めるので, 多項式を利用する. 個の2変数多項式 を
とする. このとき, としたとき, の の係数は の中から 個選んで和が になる選び方の数に対応する.
今回求めるべきは選んだ個数を で割った余りに関するので, をそれぞれ同一視したい. これは を とみなすことと同等である.
これを可能にするには, で割った剰余を考えれば良い. を の多項式と見なし, で割った商を , 余りを をする.
ここで, は に関して高々1次式なので, となる に関する に関する多項式 が存在する.
これらは
を満たす. このとき, が偶数個選ぶことに, が奇数個選ぶことに対応する多項式である.
よって, この を求められれば良い. に をそれぞれ代入すると, になることから,
となることから, これらを解いて.
となる. よって, を求めることを目標にする.
を高速に求める方法について,
であるから,
となる. これの高速化の方法は以下の Library Checker の提出から見てもらうことにして,
これにより, のうち, 必要な方の多項式の 乗の係数をみることにより, 時間計算量 で求めることができる. なお, の定め方から, であり, 4 sec の猶予が与えられているので, 間に合う.