1 条题解
-
0
自动搬运
来自洛谷,原作者为

chen_zhe
Aya 敲可爱的~搬运于
2025-08-24 22:39:03,当前版本为作者最后更新于2022-07-18 12:28:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
值得一提的是,本题赛时 AC 率并非洛谷月赛 div.2A 最低,但是我单方面认为这是洛谷月赛最难的 div.2A。
本题的最大切入口在于:
- 数据保证可以找出神 TU 喜欢的字符串。
- 输入的 均为偶数。
Subtask 1
本 subtask 满足性质 。
因为连续的相同的字符的数量不能超过 ,为了确保 中存在一个子串是“神”的,即所有出现的字符的数量相等,只需构造出 的字符串即可。因为数据保证一定存在解,所以这样做是可行的。
Subtask 2
本 subtask 满足性质 。
也就是说字符串 为最长神之子串。实际上,Subtask 1 中构造出的 即可符合这个要求。这是因为, 为最长神之子串,则 必然是个偶数,否则无法满足 与 的个数相等。
Subtask 3
本 subtask 满足性质 。
我们的想法是:可以先构造出一个长度为 的最长神之子串,然后再在后面随意添加字符,使得后面的部分不构成神之子串。
而在满足不能有超过 个连续字符的情况下,前面的神之子串可以仿照上面两个 subtask 进行构造,即构造出长度为 的字符串 。需要注意的是 为偶数,所以前面的神之子串在这样的构造情况下结尾字符是 。接着为了让后面构成不了神之子串,我们可以放 个 与 个 。这样恰好满足连续字符不超过 ,且最长神之子串的长度为 。
Subtask 4
注意,这里有个大坑点!在 的情况下,上述构造不一定适用。以一组数据为例:
以上面的构造会得出如下结果:
这个结果经不起推敲,因为该字符串从第 位取到第 位的话,正好存在 个 和 个 ,使得实际的最长神之子串的长度是 而不是 。
实际上,这种情况只会在一开始的循环字符串 的后段,与后面的 段的前面会发生。因此,我们可以考虑破坏掉一开始的循环字符串后端,将最后一个 转化成 。
这样再仿照上述构造,即可完成本题。
#include <iostream> using namespace std; int main() { int n,m,k; cin >> n >> m >> k; if (k==1) { for (int i=1;i<=n;i++) cout << (i&1?'l':'r'); return 0; } for (int i=1;i<=m-2;i++) cout << (i&1?'l':'r'); int cnt=1; cout << "rl"; for (int i=m+1;i<=n;i++) { if (cnt==0) cout << 'l'; else cout << 'r'; cnt++; cnt%=3; } return 0; }
- 1
信息
- ID
- 7440
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者