专栏文章

题解: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 条评论,欢迎与作者交流。

正在加载评论...