Beginners Typhoon After Contest#01 EX - No Bingo!
初めてブログ記事を書いた
フォントやレイアウトが壊れまくっており厳しい…
www.hackerrank.com
昨日ようやく解説の意味がわかったので自分なりの理解をまとめておく。
題意の問題は以下のように読み替えられる。
場合分けをする。
全事象の場合の数
全てのに対してとなる場合の数
全てのに対してとなる場合の数
全てのに対してかつとなる場合の数
とすると、求める場合の数はとなる。
は容易に求まるのでについて考える。
まずが偶数の時について考える。(このときとおく。)
とおくと、包除原理よりが成り立つ。
よってを求めればの値が求まることになるが、直接求めるのは難しい。
ここでと、と、、とをペアにして考える。
これらの個の組のうちいくつの組が条件を満たすかで場合分けすることを考える。
条件 を以下のように定める。
次に数列の第項を以下のように定める。
この時、1対1の性質から が成り立つため、
の和を高速に求めれば題意の問題が解けることがわかる。
さて、組において斜めのラインを防いだ穴がどのように配置され得るかを考えると、
となる。
この事実をもとに形式的冪級数を導入するととなるため、
二項定理よりが従う。
(この辺りはmaspy氏の形式的冪級数の解説記事を読むと理解しやすいと思う。)
と表される場合も、同様の考察を経ることでを導ける。
あとは適切な実装によりこの問題を高速に解くことが出来る。
提出
Programming Problems and Competitions :: HackerRank
感想
とても難しい…こういう考察を素早く進められるようになりたい。