AtCoder Beginner Contest 287 D問題 Match or Not
問題
提出解答
問題の概要
長さが等しい つの文字列 に対して, 以下を満たすとき, はマッチするという.
- に含まれる を独立に英小文字に置き換えることによって, を一致させることができる.
このとき, に対して, 以下の問に答えよ.
- を の先頭 文字と末尾 文字をこの順に連結させた文字列とする. このとき, と はマッチするか?
制約
- は英小文字列
解法
まず, 長さが等しい つの文字列 に対して, 以下は同値である.
- はマッチする.
- 全てに対して, 以下が成り立つ: の 文字目は としたとき, 以下のうちの少なくとも つが成り立つ.
ここで, に対して, と の違いは 文字目だけである. このことを利用する.
集合 を次のようにして定義する. ただし, の 文字目を と書く.
このとき, に対して以下が成り立つ.
ここで, ならばマッチ可能, そうでなければマッチ不可能である.
なお, を一々生成する時間はないので, を使いまわして を作ることによって, 全ての に対する判定を合計で 時間で判定できる.