No.3000 Optimal Run Length Encoding
レベル : / 実行時間制限 : 1ケース 10.000秒 / メモリ制限
: 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 7
作問者 : NyaanNyaan / テスター : akakimidori
タグ : / 解いたユーザー数 7
作問者 : NyaanNyaan / テスター : akakimidori
問題文最終更新日: 2024-12-22 20:54:49
問題文
概要:文字列 $S$ が与えられます。圧縮後の文字列が最短となるように連長圧縮してください。英小文字列 $A$ および英小文字と数字からなる文字列 $B$ が以下の条件を満たす時、$B$ を「$A$ を連長圧縮した文字列」と呼びます。
- 以下の手順によって $B$ から生成される文字列が $A$ と一致する。
- 整数 $k$ および $k$ 個の非空な英文字列 $u_1, u_2, \dots, u_k$ および $k$ 個の非空な数字列 $v_1, v_2, \dots, v_k$ であって、
$u_1 v_1 u_2 v_2 \dots u_k v_k$ が $B$ と一致するものを取り出す。
(このような $k, u_1, \dots, u_k, v_1, \dots, v_k$ は存在すれば一意に定まることが証明できる。)
条件を満たす $k, u_1, \dots, u_k, v_1, \dots, v_k$ が存在しない場合は、文字列を生成することなく手順を終了する。 -
文字列 $C$ を空文字列とする。$i = 1, 2, \dots, k$ の順に以下の操作を行う。
- $v_i$ を 10 進表記された数とみなしたときの値を $x$ とする。$C$ の末尾に $u_i$ を追加する操作を $x$ 回行う。
- 2. の操作を終えた後の $C$ を手順によって生成される文字列とする。
$T$ 個のテストケースが与えられるので、それぞれに対して答えを求めてください。
制約
- $1 \leq T \leq 5 \times 10^5$
- $S$ は英小文字からなる長さ $5 \times 10^5$ 以下の文字列
- 全ての入力をわたる $|S|$ の総和は $5 \times 10^5$ を超えない。
入力
入力は以下の形式で標準入力から与えられる。ここで $\mathrm{case}_i$ は $i$ 番目のテストケースを意味する。$T$ $\mathrm{case}_1$ $\mathrm{case}_2$ $\vdots$ $\mathrm{case}_T$各テストケースは以下の形式で与えられる。
$S$
出力
$T$ 行出力せよ。$i$ 行目には $i$ 番目のテストケースへの答えを出力せよ。また、最後に改行せよ。
なお、答えが複数ある場合はどれを出力してもよい。
サンプル
サンプル1
入力
7 aabababc abcdef abaababaabaab aaaaaaaaa aaaaaaaaaa baaaaaaaaa baaaaaaaaaa
出力
a1ab3c1 abcdef1 abaab2aab1 a9 a10 b1a9 ba1a9
$1$ 番目のテストケースについて、例えば a2ba2bc1
や a1ab3c1
は aabababc
を連長圧縮した文字列です。
aabababc
を連長圧縮した文字列のうち a1ab3c1
が最短のものなのでこれを出力します。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。