P14719 [RMI 2025] Cheap AI
题目描述
给定一个数 $K$ 和一个由英文小写字母组成的字符串 $S$,选择一个非空串 $t$,满足 $1 \le |t| \le K$,将 $t$ 在 $S$ 中出现的位置(选择若干个且互不重叠)替换为特殊字符 `#`,使得得到的最终字符串的长度最小。
求出这个最小长度。
### 实现细节
你需要实现下列函数:
```cpp
int solve(int K, std::string S);
```
这个函数接收 $K$ 和 $S$ 作为参数,需要求出在把一个长度不超过 $K$ 的所选 token 的若干次出现(互不重叠)替换为特殊字符 `#` 之后得到的字符串的最小长度。
输入格式
见「实现细节」。
输出格式
见「实现细节」。
说明/提示
#### 样例解释
- 样例一解释:我们选择 $t = \texttt{aabaa}$,于是 $S$ 变为 $\texttt{\#bacbb\#}$(长度为 7)。
- 样例二解释:我们选择 $t = \texttt{aaaaaa}$,于是 $S$ 变为 $\texttt{\#\#\#a}$(长度为 4)。
#### 约束
* $1 \le K \le |S| \le 200\,000$
* $S$ 由英文小写字母组成。
| # | 分值 | 限制 |
|:-:|:-:|---|
| $1$ | $5 $| $S_i = \texttt{a}$ |
| $2$ | $7 $| $\vert S\vert \le 100$ |
| $3$ | $12$ | $\vert S\vert \le 5000$ |
| $4$ | $40$ | $\vert S\vert \le 75\,000$ |
| $5$ | $36$ | $\vert S\vert \le 200\,000$ |