P10810 【MX-S2-T1】变 解题报告
【MX-S2-T1】变
题目描述
已知一个仅由小写英文字母构成的字符串
每次操作时,你可以任意选择
你可以按任意顺序对其进行不超过
请输出在进行完所有操作后,最小的可能的
一个字符串
被称为 的严格循环节,当且仅当 可以通过将 重复若干次来构造。 例如:
mai
是maimai
的严格循环节,dx
是dx
的严格循环节。但ov
不是ovo
的严格循环节。
输入格式
第一行一个非负整数
第二行一个字符串
输出格式
一行一个整数,表示答案。
样例 #1
样例输入 #1
1
test
样例输出 #1
4
样例 #2
样例输入 #2
3
test
样例输出 #2
1
样例 #3
样例输入 #3
3
apollo
样例输出 #3
3
提示
【样例解释 #1】
可以证明:最多进行一次操作的情况下,严格循环节长度至少为
【样例解释 #2】
可以通过 test
修改为 ssss
,严格循环节长度为
【数据范围】
本题采用捆绑测试。
- Subtask 0(17 pts):
, 。 - Subtask 1(14 pts):
, 。 - Subtask 2(16 pts):
, 。 - Subtask 3(32 pts):
。 - Subtask 4(21 pts): 无特殊限制。
对于所有测试数据,保证
2024.7.28:新增了一组 Hack 数据。
P10810 【MX-S2-T1】变
找到严格循环节的性质,可推出长度为 test
长度为 te
,st
)每一位最少修改次数为
注意慎用
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <unordered_map>
#include <cstring>
using namespace std;
int k;
string ss;
bool check(int l)
{
int chg=0;
for(int i=0;i<l;i++)
{
int ch[29]={0};
int sum=-1;
for(int j=i;j<ss.size();j+=l)
{
ch[ss[j]-'a']++;
}
for(int j=0;j<26;j++)
{
sum=max(sum,ch[j]);
}
chg+=(ss.size()/l)-sum;
}
return chg<=k;
}
int main()
{
cin>>k>>ss;
for(int i=1;i<=ss.size();i++)
{
if(ss.size()%i!=0) continue;
if(check(i))
{
cout<<i;
return 0;
}
}
return 0;
}
本文作者:vanueber
本文链接:https://www.cnblogs.com/vanueber/p/18668586
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
解题报告
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步