社團海報斷行
每日一題・2026-11-06 上線・免費到 2026-12-06
- 每日一題
- 基本
- APCS 中級
- 文字排版與斷行
時間限制 1 秒・記憶體 256 MB
送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。
題目敘述
社團要把一段標語印在海報上,每行最多 W 個字元。標語由小寫英文字母、連字號 - 與空格組成,單字之間以一個空格分隔。排版規則如下:
- 每個單字在每個連字號之後切開,連字號留在前一段的結尾,切出來的每一段稱為「片段」。例如
rule-of-thumb切成rule-、of-、thumb。 - 若某個片段長度超過 W,就從頭每 W 個字元切成一塊,最後一塊可能較短。每一塊視為一個片段。
- 片段由左到右依序放入,每行盡量多放(貪心)。
- 若某個片段是單字的第一個片段,而且目前這行已經有內容,放入時前面要先加一個空格。其他情況不加空格:目前這行是空的,或片段緊接在連字號之後,或片段是長片段切出的第二塊以後。
- 放入後這行(含空格)的長度必須 ≤ W,否則先換行,再把這個片段放到新的一行開頭,換行時不留空格。
- 輸出時每一行靠右對齊,左邊補
.到恰好 W 個字元。
請輸出排版結果。
輸入格式
第一行一個整數 W。第二行是標語,一個字串。
輸出格式
依序輸出每一行,每行恰好 W 個字元。
限制
- 1 ≤ W ≤ 100。
- 標語長度介於 1 到 200000。
- 標語只含小寫英文字母、
-與空格;開頭和結尾不是空格,也沒有連續兩個空格。 - 每個
-的前一個和後一個字元都是小寫英文字母。
範例
範例 1
輸入
12
a well-known rule-of-thumb says be kind輸出
a well-known
....rule-of-
..thumb says
.....be kind範例 2
輸入
5
hi extraordinary ok-go輸出
...hi
extra
ordin
..ary
ok-go說明
範例 1,W=12。片段依序是 a、well-、known、rule-、of-、thumb、says、be、kind。第一行放 a,再放 well-(前面加空格,長度 7),接著 known 緊接在連字號後不加空格,長度剛好 12,放得下。rule- 前面要加空格,會超過 12,所以換行。第二行放 rule-of-,再放 thumb 會變成 13,換行。第三行是 thumb says,再放 be 會變成 13,換行。第四行是 be kind,長度 7,左邊補 5 個 .。
範例
範例 1
輸入
12
a well-known rule-of-thumb says be kind輸出
a well-known
....rule-of-
..thumb says
.....be kind第一行 `a well-known` 剛好 12 個字元,放得下。`rule-` 前面要加空格會變 13,所以換行。後面各行依序是 `rule-of-`、`thumb says`、`be kind`,再靠右補 `.`。
範例 2
輸入
5
hi extraordinary ok-go輸出
...hi
extra
ordin
..ary
ok-go`extraordinary` 長度 13 超過 5,切成 `extra`、`ordin`、`ary`。它的第一塊接在 `hi` 後面要加空格,放不下,所以 `hi` 自己一行。最後 `ok-` 與 `go` 合起來剛好 5。
送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。
卡住了可以到 Discord 的 #程式問題 發問,小墨助教會先給提示,不會直接給答案。