エイシング プログラミング コンテスト 2020 F - Two Snuke O(1) 解法
O(1) 解法
問題を見た瞬間多項式だと直感したので多項式で問題を表します。
上記のように を定義すると、答えは次のように表せる。
さらに、Wolfram Alpha へこの式を突っ込んで部分分数分解すると下のように表せる(1/((1-x)^16(1+x)^5) 部分分数分解 - Wolfram|Alpha)。
負の二項定理を用いると、各項の 項目を次のように計算することができる。
よって、部分分数分解した結果の項ごとに 項目を計算して総和を取ることでこの問題を解くことができる。項数および次数は定数なので、二項係数は定数時間で計算することができる、よって全体でも定数時間で答えることができる。