QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 4096 MB Total points: 100 Difficulty: [show] Output Only Interactive

#13649. 重複的二進位字串

الإحصائيات

Carlos 正在利用暑假研究「重複二元字串」。一個重複二元字串是一個非空的字串 $T$,滿足以下條件:

  • $T$ 僅包含字元 $0$ 和 $1$(亦即 $T$ 是一個二元字串)。
  • $T$ 可以寫成 $T = \overline{UU}$ 的形式,其中 $U$ 為任意二元字串,而運算 $\overline{ab}$ 代表字串 $a$ 與 $b$ 的串接(即將它們一個接一個寫成單一字串)。

例如,$0000$ 和 $011011$ 是重複二元字串,但 $01$、$0110$ 和 $000$ 則不是。

定義二元字串 $S$ 的「強度」(strength)為 $S$ 中存在的相異連續重複子字串的數量。若兩個子字串在至少一個字元上不同,則視為不同的子字串。

本題包含兩個部分,每個子任務與 Part I 或 Part II 相關。你可以按任意順序解決子任務;特別地,你不必在嘗試 Part II 之前完成 Part I 的所有內容。

Part I

Carlos 給你一個二元字串 $S$,你的任務是計算它的強度。

實作細節

你應該實作以下函式:

int count_duplicated(std::string S)
  • $S$: 長度為 $N$ 的二元字串。
  • 此函式對每個測試案例僅會被呼叫一次。

此函式應回傳一個整數 $K$,即 $S$ 中存在的相異連續重複子字串的數量。

資料範圍

  • $4 \le N \le 100$
  • 對於每個 $0 \le i < N$,$S[i]$ 為 $0$ 或 $1$。

子任務

子任務 分數 其他限制
1 6 $N = 4$
2 9 無其他限制

範例

範例 1

考慮以下呼叫:

count_duplicated("0101")

$S$ 中只有一個重複二元子字串,即 $0101$。因此,該函式應回傳 $1$。

範例 2

考慮以下呼叫:

count_duplicated("0000")

$S$ 中有兩個重複二元子字串:$00$ 和 $0000$。因此,該函式應回傳 $2$。

注意,儘管子字串 $00$ 在 $S$ 中出現了三次,但在最終答案中它只被計算一次。

Part II

Carlos 想知道二元字串 $S$ 的最小強度與最大強度分別為何。

你的任務是構造長度為 $100$ 的二元字串,使其包含盡可能少或盡可能多的重複子字串。你將根據重複子字串的數量獲得分數。

子任務

本部分包含 2 個僅輸出(output-only)的子任務,採用部分給分。

子任務 分數 限制
3 25 最小化 $S$ 的強度
4 60 最大化 $S$ 的強度

實作細節

對於每個子任務,你應該:

  • 提交一個包含長度為 $100$ 的二元字串的輸出檔案,或者
  • 在你的程式中回傳一個二元字串給評測系統的函式呼叫。

每個輸出檔案必須採用以下格式:

S

若要在你的解決方案程式中構造所需的二元字串,你應該實作以下函式:

std::string find_weakest()
  • 若你的提交中提供了子任務 3 的輸出檔案,則不會呼叫此函式。
  • 否則,此函式在子任務 3 中會被呼叫一次。

此函式應回傳一個長度為 $N = 100$ 且強度最小的二元字串 $S$。

std::string find_strongest()
  • 若你的提交中提供了子任務 4 的輸出檔案,則不會呼叫此函式。
  • 否則,此函式在子任務 4 中會被呼叫一次。

此函式應回傳一個長度為 $N = 100$ 且強度最大的二元字串 $S$。

評分

如果你的輸出不符合實作細節中描述的限制,該子任務的得分將為 $0$(在 CMS 中顯示為 Output isn't correct)。

令 $K$ 為給定子任務中你輸出字串的強度。

在子任務 3 中,你的得分根據下表計算:

條件 分數
$20 < K$ $0$
$4 < K \le 20$ $21 - K$
$K = 4$ $20$
$K = 3$ $25$

在子任務 4 中,你的得分根據下表計算:

條件 分數
$K \le 50$ $0$
$50 < K \le 80$ $K - 50$
$80 < K \le 83$ $30 + 5 \cdot (K - 80)$
$K = 84$ $60$

範例評測程式

Part I 和 Part II 使用相同的範例評測程式,兩部分的區別由輸入的第一行決定。

輸入格式 (Part I)

1
S

輸出格式 (Part I)

K

輸入格式 (Part II)

2
T

此處 $T$ 為字串 weakeststrongest

輸出格式 (Part II)

S

注意,範例評測程式的輸出符合 Part II 輸出檔案所需的格式。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.