字串操作 (APCS 2025-01 中級)

1.0s 256M

給定一個長度為偶數的字串 \(S\)。字串只包含小寫英文字母,並有以下三種 操作:

  1. 操作 0:兩兩交換

    從左到右把相鄰兩個字元分成一組,交換每組中的兩個字元。 例如 apcsntnu 分成 (ap)(cs)(nt)(nu) 後會變成 (pa)(sc)(tn)(un),結果為 pasctnun

  2. 操作 1:兩兩排序

    從左到右把相鄰兩個字元分成一組,按照 \(a<b<\dots<z\) 的字典序排列每一組。注意,不同組之間不會互相 排序。例如 family 分成 (fa)(mi)(ly) 後,結果為 (af)(im)(ly),也就是 afimly

  3. 操作 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 會先拆成 apcsntnu, 再交錯成 anptcnsu

接下來會給定 \(k\) 個操作。請依照輸入順序執行所有操作,並輸出最後的 字串。

輸入格式

第一行包含字串 \(S\)。

第二行包含一個正整數 \(k\),表示操作次數。

接下來 \(k\) 行,每行包含一個整數 \(op\),表示操作編號 \(0\)、\(1\) 或 \(2\)。

限制

  • \(2\le |S|\le100\)
  • \(|S|\) 為偶數
  • \(S\) 只包含小寫英文字母 az
  • \(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 依序經過四次操作:

  1. 操作 2:facebook 變成 fbaocoek
  2. 操作 0:fbaocoek 變成 bfoaocke
  3. 操作 2:bfoaocke 變成 bofcokae
  4. 操作 1:bofcokae 變成 bocfkoae

題目來源

改編自 APCS 2025 年 1 月實作題第 2 題「字串操作」 (ZeroJudge q182); 題意整理另參考王一哲的 HackMD 題解

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。