试题 历届真题 重复字符串【第十一届】【决赛】【研究生组】
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
有点奇怪这道题。
题中所说 如果s无法修改成k次重复字符串,输出-1
所以 开始判断一下
if(len%n!=0)
{
cout<<-1;
return 0;
}
提交之后只有90分,,,,没有这段代码,提交了100
思路:先分成n个区域(n=题中k),循环中记录每个区域的i位置处,各个符号(a-z)出现的次数,并保存下出现次数最多的符号记录到maxx,
i位置循环结束后,sum+=n-maxx(n-maxx得到需要修改的字符串的个数,将该个数记录到总数sum中),最后得到的sum就是总的修改次数。
代码:
#include <bits/stdc++.h>
using namespace std;
int n,rem[26];
string str;
int main()
{
cin>>n>>str;
int len=str.size(),sum=0,maxx;
for(int i=0;i<len/n;i++)
{
memset(rem,0,sizeof(rem));
maxx=0;
for(int j=0;j<n;j++)
{
int x=++rem[str[j*(len/n)+i]-'a'];
maxx=max(maxx,x);
}
sum+=n-maxx;
}
cout<<sum;
return 0;
}
202205291455日