Carlos 正在度过他的暑假,研究重复二进制字符串。一个重复二进制字符串是一个非空字符串 $T$,满足:
- $T$ 仅包含字符 $0$ 和 $1$(即 $T$ 是一个二进制字符串)。
- $T$ 可以写成 $T = \overline{UU}$ 的形式,其中 $U$ 是任意二进制字符串,且运算 $\overline{ab}$ 表示字符串 $a$ 和 $b$ 的拼接(即作为一个字符串依次写下它们)。
例如,$0000$ 和 $011011$ 是重复二进制字符串,但 $01$、$0110$ 和 $000$ 不是。
定义二进制字符串 $S$ 的强度为 $S$ 中存在的不同连续重复子串的数量。如果两个子串在至少一个字符上不同,则认为它们是不同的。
本题包含两个部分,每个子任务与第一部分(Part I)或第二部分(Part II)相关联。你可以按任意顺序解决子任务;特别地,你不需要在尝试第二部分之前完成第一部分的所有内容。
第一部分 (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$ 个仅输出答案的子任务,采用部分分计分。
| 子任务 | 分值 | 约束 |
|---|---|---|
| 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$ |
样例
第一部分和第二部分使用相同的样例评测程序,通过输入的第一行来区分这两个部分。
输入格式(第一部分)
1 S
输出格式(第一部分)
K
输入格式(第二部分)
2 T
此处,$T$ 为字符串 weakest 或字符串 strongest。
输出格式(第二部分)
S
注意,样例评测程序的输出符合第二部分输出文件所需的格式。