#P13986. 「RMI 2025」Cheap AI

    ID: 13192 传统题 2000ms 64MiB 尝试: 1 已通过: 1 难度: 9 上传者: 标签>CF2600后缀数组字符串贪心二分后缀自动机线段树

「RMI 2025」Cheap AI

注意事项

请在提交源代码前添加 #include "cheapai.h"

题目描述

你是一只压力山大的小老鼠,正试图在人工智能初创公司飞速崛起的浪潮中求生。竞争对手无处不在,获得技术优势似乎几乎是不可能的。在绝望地寻找优势的过程中,你偶然发现了 CheapAI™,这是一家资金少得可怜的初创公司,就连你也能够在那里谋得一份差事。你的第一个任务是构建世界上最便宜的分词器(Tokenizer)。

你被 CheapAI™ 录用了,首要任务就是构建分词器。不幸的是,预算非常有限,除了英语字母表的 2626 个字母外,你只能负担得起一个长度不超过 KK 的额外标记(token)。

给定一个由小写英文字母组成的字符串 SS 和一个数字 KK。你的目标是选择一个长度不超过 KK 的标记(字符串),使得如果将该标记在 SS 中出现的部分(互不重叠)替换为特殊字符 #,所得结果字符串的总长度最小。

给定一个数字 KK 和一个由小写英文字母组成的字符串 SS,选择一个非空字符串(标记)tt,满足 1tK1 \leq |t| \leq K,将 SS 中出现的 tt(选择互不重叠的部分)替换为特殊字符 #,从而得到一个长度最小的最终字符串。

请确定这个最小长度。

实现细节

你需要实现以下函数:

int solve(int K, std::string S);

该函数接收 KKSS 作为参数,你需要确定在将选定的长度不超过 KK 的标记的(互不重叠)出现位置替换为特殊字符 # 后,所获得的字符串的最小长度。

5 
aabaabacbbaabaa

7

8 
aaaaaaaaaaaaaaaaaaa

4

数据范围与提示

对于所有输入数据,满足:

  • 1KS2000001 \leq K \leq |S| \leq 200000
  • SS 由小写英文字母组成。

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 55 Si=’a’1iSS_{i}=\text{'a'} \quad 1 \leq i \leq \vert S\vert
22 77 S100\vert S\vert \leq 100
33 1212 S5000\vert S\vert \leq 5000
44 4040 S75000\vert S\vert \leq 75000
55 3636 S200000\vert S\vert \leq 200000