打卡信奥刷题(2001)用C++实现信奥 P10810 【MX-S2-T1】 变

P10810 【MX-S2-T1】 变

题目背景

原题链接:https://oier.team/problems/S2A

题目描述

已知一个仅由小写英文字母构成的字符串 s s s

每次操作时,你可以任意选择 s s s 中的一个字符,并将它修改为任意小写英文字母。

你可以按任意顺序对其进行不超过 k k k 次操作,以最小化 s s s严格循环节的长度。当然,不进行操作也是可以的。

请输出在进行完所有操作后,最小的可能的 s s s 的严格循环节的长度。

一个字符串 t t t 被称为 s s s 的严格循环节,当且仅当 s s s 可以通过将 t t t 重复若干次来构造。

例如:maimaimai 的严格循环节,dxdx 的严格循环节。但 ov 不是 ovo 的严格循环节。

输入格式

第一行一个非负整数 k k k

第二行一个字符串 s s s,仅包含小写英文字母。

输出格式

一行一个整数,表示答案。

输入输出样例 #1

输入 #1

1
test

输出 #1

4

输入输出样例 #2

输入 #2

3
test

输出 #2

1

输入输出样例 #3

输入 #3

3
apollo

输出 #3

3

说明/提示

【样例解释 #1】

可以证明:最多进行一次操作的情况下,严格循环节长度至少为 4 4 4

【样例解释 #2】

可以通过 3 3 3 次操作,将 test 修改为 ssss,严格循环节长度为 1 1 1

【数据范围】

本题采用捆绑测试。

  • Subtask 0(17 pts): k = 0 k = 0 k=0 ∣ s ∣ ≤ 6 |s| \leq 6 s6
  • Subtask 1(14 pts): k = 1 k = 1 k=1 ∣ s ∣ ≤ 20 |s| \leq 20 s20
  • Subtask 2(16 pts): k = 1 k = 1 k=1 ∣ s ∣ ≤ 500 |s| \leq 500 s500
  • Subtask 3(32 pts): k < ∣ s ∣ ≤ 1 0 5 k < |s| \leq 10^5 k<s105
  • Subtask 4(21 pts): 无特殊限制。

对于所有测试数据,保证 0 ≤ k < ∣ s ∣ ≤ 1 0 6 0 \leq k < |s| \leq 10^6 0k<s106 s s s 中仅包含小写英文字母。

2024.7.28:新增了一组 Hack 数据。

C++实现

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=1e5+5;
int k;
string str;
int s[30];
signed main(){
	cin>>k>>str;
	int len=str.size();
	str=' '+str;
	for(int i=1;i<=len;i++)	{
		if(len%i==0)		{
			int mod=len/i;//区间个数
			int ans=0;
			for(int j=1;j<=i;j++){
				int maxn=-1;
				memset(s,0,sizeof s);
				for(int k=1;k<=mod;k++)				{
					int l=j+(k-1)*i;
					s[str[l]-'a'+1]++;
					maxn=max(maxn,s[str[l]-'a'+1]);//最多有几个区间不要改
				}
				ans+=mod-maxn;
			}
			if(ans<=k)
			{
				cout<<i<<'\n';
				exit(0);
			}
		}
	}
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值