H - LCS order
Editorial
/
/
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 100 点
問題文
長さ N の文字列 S と、長さ M の文字列 T が与えられます。
以下の Q 個のクエリに答えてください。
i \ (1\leq i\leq Q) 番目のクエリは以下の通りです。
- S, T の LCS のうち、辞書順で k_i 番目のものを出力する。
ただし、該当する LCS が存在しない場合や空文字列である場合は、-1 を出力してください。
なお、LCS 同士が文字列として等しい場合、異なる位置から取り出したものであっても、それらは区別しないものとします。
LCS (最長共通部分列)とは
文字列 S, T の LCS とは、S の部分列でも T の部分列でもあるような文字列のうち、長さが最大のもののことを指します。 ここで、ある文字列 U の部分列とは、U から 0 個以上の文字を取り出し、それらを順序を変えずに並べた文字列のことを指します。制約
- 1\leq N,M,Q\leq 1000
- 1\leq k_i\leq 10^9
- N,M,Q,k_i は整数
- S は長さ N の英小文字列
- T は長さ M の英小文字列
入力
入力は以下の形式で標準入力から与えられます。
N M S T Q k_1 k_2 \vdots k_Q
出力
Q 行出力してください。
i \ (1\leq i\leq Q) 行目には、i 番目のクエリの答えを出力してください。
入力例1
6 6 abcdef abfedc 4 1 2 4 8
出力例1
abc abd abf -1
LCS の長さは 3 であり、辞書順にすべて列挙すると、abc, abd, abe, abfとなります。
したがって、 3 番目のクエリまでは 1, 2, 4 番の LCS を出力します。
4 番目のクエリでは、LCS の数は全部で 4 種類であるため -1 を出力します。
入力例2
5 5 abcde abbbb 2 1 2
出力例2
ab -1
LCS の長さは 2 であり、辞書順にすべて列挙すると、ab のみとなります。(取る添え字が異なるものは区別しません。)
入力例3
4 4 abcd efgh 1 1
出力例3
-1
二つの文字列で一致する箇所はなく、LCS は空文字列となるため -1 を出力します。