Codeforces Round #635 (Div. 2) E - Kaavi and Magic Spell
問題はこちら
問題概要
長さの文字列
と長さ
の文字列
が与えられる. 空文字列
を用意して,
の先頭か末尾に
を挿入していくことを考える.
の接頭辞が
に等しくなるような挿入の仕方の総数を998244353で割った余りを求めよ.
思考の流れ
制約や操作からDPっぽさを感じるのでDPを考える.
「の
番目までを使用」ってのはいるとして, 「
になる」というのがあればよさそうだが空間計算量
で無理.
が決まると
の長さも決まるので
はいらないっぽい.
を「
の
番目までを使って
と一致する文字列を作るときの操作の数」とする.
が範囲外になることがあるが, そのときは範囲内までのものを考える. つまり
を考える.
のとき
までできているときに, 前に
をつければ
が作れる.
のとき
いままでどのような操作を行って, どのような文字列になったかは関係ない. よってを足せばいい.
のとき
までできているときに, 後ろに
をつければ
が作れる.
のとき
までできているときに, 後ろに
をつけると
が作れる.
以上のことを遷移式としてやるとできる. 具体的な実装はプログラムを参照.
提出プログラム
https://codeforces.com/contest/1337/submission/79305770
感想
DP定義の時点で分からなかった. どの状態がいらないか判断するの難しい.
コドフォ民の正解率高かったけどコドフォ民はDPが得意?