P8739 [蓝桥杯 2020 国 C] 重复字符串

[蓝桥杯 2020 国 C] 重复字符串

题目描述

如果一个字符串 S S S 恰好可以由某个字符串重复 K K K 次得到,我们就称 S S S 是 K K K 次重复字符串。例如 abcabcabc 可以看作是 abc 重复 3 3 3 次得到,所以 abcabcabc 是 3 3 3 次重复字符串。

同理 aaaaaa 既是 2 2 2 次重复字符串、又是 3 3 3 次重复字符串和 6 6 6 次重复字符串。

现在给定一个字符串 S S S,请你计算最少要修改其中几个字符,可以使 S S S 变为一个 K K K 次字符串?

输入格式

输入第一行包含一个整数 K K K。

第二行包含一个只含小写字母的字符串 S S S。

输出格式

输出一个整数代表答案。如果 S S S 无法修改成 K K K 次重复字符串,输出 − 1 −1 −1。

样例 #1

样例输入 #1

复制代码
2
aabbaa

样例输出 #1

复制代码
2

提示

其中, 1 ≤ K ≤ 1 0 5 1 \le K \le 10^5 1≤K≤105, 1 ≤ ∣ S ∣ ≤ 1 0 5 1 \le |S| \le 10^5 1≤∣S∣≤105。其中 ∣ S ∣ ∣S∣ ∣S∣ 表示 S S S 的 长度。

蓝桥杯 2020 年国赛 C 组 G 题。

cpp 复制代码
#include<iostream>
#include<cstring>
#include<string>
#include<map>
using namespace std;
int n,mmax;
string s;
int sum;
int main()
{
	
	cin>>n>>s;
	if(s.size()%n!=0){
		cout<<-1;//不能被整除直接排除
		return 0;
	}
	int t=s.size()/n;//可以分为几组
	for(int i=0;i<t;i++)//循环组数
	{
		
		map<char,int>mm;//记录每一组的各个位置上的字母出现个数
		int res=0;//答案
		for(int j=i;j<s.size();j+=t)
		{//这里是+t,一组一组来看
			mm[s[j]]++;		
		}
		for(int i=0;i<+26;i++)
		{
			
			res=max(res,mm[i+'a']);	
		}
		sum+=n-res;//把不一样的的其他数删咯的和
	}
	cout<<sum;
	return 0;	
}
相关推荐
程序员三藏18 分钟前
如何使用Pytest进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
C语言小火车3 小时前
野指针:C/C++内存管理的“幽灵陷阱”与系统化规避策略
c语言·c++·学习·指针
凤年徐3 小时前
【数据结构】时间复杂度和空间复杂度
c语言·数据结构·c++·笔记·算法
鑫宇吖3 小时前
Polyspace作为MISRA-C合规性检查工具,其检查规则会根据目标C语言标准(C90或C99)动态调整限值要求。
c语言·嵌入式·c99·c90·polyspace·misra-c合规性检查
钮钴禄·爱因斯晨4 小时前
C语言 | 函数核心机制深度解构:从底层架构到工程化实践
c语言·开发语言·数据结构
Z字小熊饼干爱吃保安4 小时前
面试技术问题总结一
数据库·面试·职场和发展
运维开发王义杰4 小时前
打破技术债困境:从“保持现状”到成为变革的推动者
运维·职场和发展
爱学习的小邓同学5 小时前
数据结构 --- 队列
c语言·数据结构
Coding小公仔5 小时前
LeetCode 8. 字符串转换整数 (atoi)
算法·leetcode·职场和发展
GEEK零零七5 小时前
Leetcode 393. UTF-8 编码验证
算法·leetcode·职场和发展·二进制运算