No.3667 Prefix Count Queries
問題文最終更新日: 2026-08-31 20:49:02
注意
この問題はX/BlueSky/Discordにて公開した事のある問題です。
問題文
$N$ 個の英小文字列 $A_1, A_2, \dots, A_N$ が与えられます。
また、現在空文字列である文字列 $S$ があります。
以下の $Q$ 個のクエリを与えられた順に処理してください。
1 x: 文字列 $S$ の末尾に英小文字 $x$ を追加する。2: 文字列 $S$ の末尾の文字を $1$ 文字削除する。3: $A_1, \dots, A_N$ のうち、現在の $S$ を接頭辞として持つものの個数を出力する。
$S$ が空の時に $N$ 個の文字列全てが $S$ を接頭辞として持つものとなることに注意してください。
制約
- $1 \le N, Q \le 2 \times 10^5$
- $A_i$ は英小文字からなる長さ $1$ 以上の文字列
- すべての $A_i$ の長さの合計は $2 \times 10^5$ 以下
- クエリ $1$ の $x$ は $1$ 文字の英小文字
- クエリ $2$ のとき、$S$ は空ではない
- クエリ $3$ は各テストケースに $1$ つ以上存在する
- $N$, $Q$ は整数である。
入力
入力は以下の形式で標準入力から与えられる。
$N$
$A_1$
$A_2$
$\vdots$
$A_N$
$Q$
$\text{query}_1$
$\text{query}_2$
$\vdots$
$\text{query}_Q$
各 $\text{query}_i$ は以下のいずれかの形式である。
1 x
2
3
出力
クエリ $3$ の数を $k$ としたとき、$k$ 行出力してください。
$i$ 行目には、$i$ 番目のクエリ $3$ に対する答え(現在の $S$ を接頭辞として持つ文字列の個数)を出力してください。
最後に改行してください。
サンプル
サンプル1
入力
3 apple api application 8 1 a 1 p 3 1 p 3 2 1 i 3
出力
3 2 1
最初、$S$ は空文字列です。
- $1$ つ目のクエリ
1 aで、$S$ はaになります。 - $2$ つ目のクエリ
1 pで、$S$ はapになります。 - $3$ つ目のクエリ
3で、apを接頭辞に持つ文字列はapple,api,applicationの $3$ つなので、$3$ を出力します。 - $4$ つ目のクエリ
1 pで、$S$ はappになります。 - $5$ つ目のクエリ
3で、appを接頭辞に持つ文字列はapple,applicationの $2$ つなので、$2$ を出力します。 - $6$ つ目のクエリ
2で、末尾の文字が削除され $S$ はapに戻ります。 - $7$ つ目のクエリ
1 iで、$S$ はapiになります。 - $8$ つ目のクエリ
3で、apiを接頭辞に持つ文字列はapiの $1$ つのみなので、$1$ を出力します。
サンプル2
入力
2 cat dog 5 3 1 c 1 o 3 2
出力
2 0
- $1$ つ目のクエリ
3では、$S$ は空文字列です。すべての文字列が空文字列を接頭辞として持つため、$N$ と同じ $2$ を出力します。 - その後、$S$ は
c$\to$coと変化します。 - $4$ つ目のクエリ
3では、coを接頭辞に持つ文字列は存在しないため、$0$ を出力します。
サンプル3
入力
3 abc abc a 4 1 a 3 1 b 3
出力
3 2
$A$ には同じ文字列が複数含まれることもあります。
$S$ が ab のとき、abc($1$ つ目)と abc($2$ つ目)が条件を満たします。
サンプル4
入力
4 a aa aaa aaaa 7 1 a 1 a 1 a 3 2 3 2
出力
2 3
- $4$ つ目のクエリの時点で $S$ は
aaaとなっており、これを接頭辞に持つのはaaa,aaaaの $2$ つです。 - $6$ つ目のクエリの時点で $S$ は
aaとなっており、これを接頭辞に持つのはaa,aaa,aaaaの $3$ つです。
サンプル5
入力
1 z 6 1 z 3 1 z 3 2 3
出力
1 0 1
- $S$ が
zのとき、接頭辞として持つのはzの $1$ つです。 - $S$ が
zzのとき、接頭辞として持つ文字列は存在しないため $0$ を出力します。$S$ の長さが $A_i$ の長さを超えることもあります。 - その後、末尾が削除されて $S$ が再び
zに戻り、答えは $1$ になります。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。