汪汪汪汪汪汪汪汪汪汪汪汪汪汪王汪汪汪汪汪汪汪汪 这个题非常简单,首先,分为k个字串,汪汪汪,要求每个子串都相同,并且更改次数最小,汪汪汪,那么我们就让每个子串相同位置更改次数最小,即记录不同子串相同位置字母出现次数的最大值,并用子串个数减去它,即为更改次数最小值,喵呜~(可恶的猫猫乱入),注意不是直接记录出现次数最小值,汪汪汪,对于数据结构,用mp或者vector。
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n,k;cin >> n >> k;
vector<vector<char>> arr(n / k + 1,vector<char>(k +1));
for(int i = 1;i <= n / k;i++) {
for(int j = 1;j <= k;j++) {
cin >> arr[i][j];
}
}
vector<int> mp(26);
int ans = 0;
for(int j = 1;j <= k;j++) {
for(int i = 1;i <= n/k;i++) {
mp[arr[i][j] - 'a']++;
}
int mx = *max_element(mp.begin(), mp.end());
// cout << mi << " " << j << "\n";
mp.assign(26, 0);
ans += (n / k - mx);
}
cout << ans << "\n";
}
int main() {
cin.tie(0) -> sync_with_stdio(0);
solve();
return 0;
}