专栏文章
题解:P14018 [ICPC 2024 Nanjing R] 左移 3
P14018题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minx39ho
- 此快照首次捕获于
- 2025/12/02 09:46 3 个月前
- 此快照最后确认于
- 2025/12/02 09:46 3 个月前
原题在这儿
非常简单的一道字符串题,看似可以暴力,实则的确可以,直接枚举字符串变化就行了,like this:
CPP for (int i = 1; i <= k; i++)
{
ans = max(ans, cx(s));
s += s[0], s = s.substr(1);
}
超时严重,再加上优化:
nanjing只有7字符长度,给定样例anjingananjingqqn,这时左移6位可得到最大数量,这已经是最坏情况,所以枚举范围可降为枚举k和6之间的最小值次
AC代码:
CPP#include <bits/stdc++.h>
using namespace std;
long long cx(string s);
int main()
{
long long t;
cin >> t;
while (t--)
{
long long n, k;
cin >> n >> k;
string s;
cin >> s;
long long ans = -1;
for (int i = 1; i <= min(6ll, k); i++)//有可能k比6还要小
{
if (ans * 8 > n)//如果不可能有更优答案则退出
break;
ans = max(ans, cx(s));
s += s[0], s = s.substr(1);
}
ans = max(ans, cx(s));//最后要再查一次
cout << ans << '\n';
}
}
//查询
long long cx(string s)
{
long long st = 0, sum = 0;
while (s.find("nanjing", st) != -1)//不断找nanjing出现的位置
sum++, st = s.find("nanjing", st) + 7;//移动查找的起点
return sum;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...