Good Bye 2015 D. New Year and Ancient Prophecy
問題
提出コード
の文字列を一つの年として見た時の、の組み合わせの個数
とします。
の文字列を使用した、と言うことは、次に選ぶがより真に大きい値になる必要があります。
条件は以下の二つで、どちらか片方を満たせばよいです。
これは、桁がそもそも大きいパターンです。かつ、2つの文字列を左から順に見ていった場合に初めて異なる値をについては、についてはとしたときに、
桁が同じ場合です。
1つめのパターンはすぐに計算できます。2つめのパターンが含まれるか含まれないか、を調べればよいです。
これは、についてZ algorithmを適用し、からの接頭辞がどれだけ一致しているかを見ればよいです。
結局遷移は以下のようになります。
となるが含まれる場合
含まれない場合
で計算できます。
累積和を更新しながらDPをすることで、で解けます。