NC205070. 牛牛喜欢字符串
描述
输入描述
第一行输入n(1≤n≤106)和k(1≤k≤n 数据保证n%k=0),第二行输入该字符串。
输出描述
输出需要的最少操作次数
示例1
输入:
6 2 abaaba
输出:
2
说明:
改为aaaaaa示例2
输入:
6 3 abbabb
输出:
0
C++14(g++5.4) 解法, 执行用时: 65ms, 内存消耗: 1368K, 提交时间: 2020-06-21 15:17:22
#include<bits/stdc++.h> using namespace std; int n,k; char s[1000006]; int main() { scanf("%d%d",&n,&k); scanf("%s",s); int an=0; for(int i=0;i<k;i++) { map<char,int> mp; int mx=0; for(int j=i;j<n;j+=k) { mp[s[j]]++; mx=max(mx,mp[s[j]]); } an+=(n/k-mx); } printf("%d\n",an); }
C(clang11) 解法, 执行用时: 26ms, 内存消耗: 2220K, 提交时间: 2021-03-16 22:25:00
#include<stdio.h> char s[1000005]; int main() { int i,j,k,l,n,m,max,sum=0; scanf("%d%d\n",&n,&m); gets(s); for(i=0;i<m;i++){ max=0; int a[26]={0}; for(j=i;j<n;j+=m) a[s[j]-97]++; for(j=0;j<26;j++) if(max<a[j]) max=a[j]; sum+=(n/m)-max; } printf("%d",sum); }
C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 1512K, 提交时间: 2020-06-21 15:41:22
#include<bits/stdc++.h> using namespace std; char R[1000005]; int main() { int i,j,n,k,ans=0; scanf("%d%d%s",&n,&k,R); for(i=0;i<k;i++) { int V[26]={0},t=0; for(j=i;j<n;j+=k)V[R[j]-'a']++,t=max(V[R[j]-'a'],t); ans+=n/k-t; } printf("%d\n",ans); }
Python3(3.9) 解法, 执行用时: 1067ms, 内存消耗: 4832K, 提交时间: 2021-04-07 15:59:45
n,k=map(int,input().split()) cnt=0 s=input() for i in range(k): a={} for j in s[i::k]: if j not in a: a[j]=1 else:a[j]+=1 a_s=sorted(a.items(),key=lambda x:x[1]) cnt+=n//k-a_s[-1][1] print(cnt)