A3934 「RMI 2025」Cheap AI

暂无评定 传统题 RMI(罗马尼亚) 上传者
时间限制2000ms
内存限制64MiB
通过 / 提交0/0

A3934「RMI 2025」Cheap AI

暂无评定 传统题 RMI(罗马尼亚) 上传者
时间限制2000ms
内存限制64MiB
通过 / 提交0/0

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 17 及以上)

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

题目描述

题目译自 Romanian Master of Informatics 2025 Day2 T1 「Cheap AI」

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

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

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

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

请确定这个最小长度。

实现细节

你需要实现以下函数:

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

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

5 
aabaabacbbaabaa

7

8 
aaaaaaaaaaaaaaaaaaa

4

数据范围与提示

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

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

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

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