// 題目

社團海報斷行

每日一題・2026-11-06 上線・免費到 2026-12-06

  • 每日一題
  • 基本
  • APCS 中級
  • 文字排版與斷行

時間限制 1 秒・記憶體 256 MB

到 Aki-Judge 送出

送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。

題目敘述

社團要把一段標語印在海報上,每行最多 W 個字元。標語由小寫英文字母、連字號 - 與空格組成,單字之間以一個空格分隔。排版規則如下:

  1. 每個單字在每個連字號之後切開,連字號留在前一段的結尾,切出來的每一段稱為「片段」。例如 rule-of-thumb 切成 rule-、of-、thumb。
  2. 若某個片段長度超過 W,就從頭每 W 個字元切成一塊,最後一塊可能較短。每一塊視為一個片段。
  3. 片段由左到右依序放入,每行盡量多放(貪心)。
  4. 若某個片段是單字的第一個片段,而且目前這行已經有內容,放入時前面要先加一個空格。其他情況不加空格:目前這行是空的,或片段緊接在連字號之後,或片段是長片段切出的第二塊以後。
  5. 放入後這行(含空格)的長度必須 ≤ W,否則先換行,再把這個片段放到新的一行開頭,換行時不留空格。
  6. 輸出時每一行靠右對齊,左邊補 . 到恰好 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。

到 Aki-Judge 送出

送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。

卡住了可以到 Discord 的 #程式問題 發問,小墨助教會先給提示,不會直接給答案。