字串操作 (APCS 2025-01 中級)
1.0s 256M給定一個長度為偶數的字串 \(S\)。字串只包含小寫英文字母,並有以下三種 操作:
-
操作 0:兩兩交換
從左到右把相鄰兩個字元分成一組,交換每組中的兩個字元。 例如
apcsntnu分成(ap)(cs)(nt)(nu)後會變成(pa)(sc)(tn)(un),結果為pasctnun。 -
操作 1:兩兩排序
從左到右把相鄰兩個字元分成一組,按照 \(a<b<\dots<z\) 的字典序排列每一組。注意,不同組之間不會互相 排序。例如
family分成(fa)(mi)(ly)後,結果為(af)(im)(ly),也就是afimly。 -
操作 2:完美重排
設字串長度為 \(n\)。先把字串分成長度相同的前半段與後半段,再依序 交錯取出前半段第 \(i\) 個字元、後半段第 \(i\) 個字元。
換句話說,原本索引
\[0,1,\dots,\frac n2-1\]與
\[\frac n2,\frac n2+1,\dots,n-1\]的字元,會按照
\[0,\frac n2,1,\frac n2+1,\dots,\frac n2-1,n-1\]的順序重新排列。例如
apcsntnu會先拆成apcs與ntnu, 再交錯成anptcnsu。
接下來會給定 \(k\) 個操作。請依照輸入順序執行所有操作,並輸出最後的 字串。
輸入格式
第一行包含字串 \(S\)。
第二行包含一個正整數 \(k\),表示操作次數。
接下來 \(k\) 行,每行包含一個整數 \(op\),表示操作編號 \(0\)、\(1\) 或 \(2\)。
限制
- \(2\le |S|\le100\)
- \(|S|\) 為偶數
- \(S\) 只包含小寫英文字母
a到z - \(1\le k\le100\)
- \(op\in\{0,1,2\}\)
輸出格式
輸出執行完全部操作後的字串。
評分說明
每一筆測試資料的執行時間限制均為 \(1\) 秒,依正確通過的測試資料筆數給分。其中:
| 子題 | 分數 | 額外限制 |
|---|---|---|
| 1 | 60 | \(\lvert S\rvert \le 10\)、\(k = 1\),且保證操作為完美重排 |
| 2 | 40 | 無額外限制 |
範例輸入 1
apcsntnu
1
2
範例輸出 1
anptcnsu
範例輸入 2
facebook
4
2
0
2
1
範例輸出 2
bocfkoae
範例解釋 2
facebook 依序經過四次操作:
- 操作 2:
facebook變成fbaocoek。 - 操作 0:
fbaocoek變成bfoaocke。 - 操作 2:
bfoaocke變成bofcokae。 - 操作 1:
bofcokae變成bocfkoae。
題目來源
改編自 APCS 2025 年 1 月實作題第 2 題「字串操作」 (ZeroJudge q182); 題意整理另參考王一哲的 HackMD 題解。
登入後即可撰寫程式並提交評測。
登入