题目链接:http://hihocoder.com/problemset/problem/1052
题意:中文题面,就是修改其中几个字符,使得[0,k-1]和[n-k,n-1]的字符相同。
会发现一个问题就是,每n-k个字符都是相同的。
所以每次找n-k个字符,统计不同字符个数,把它们统一替换成出现次数最多的那个。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 1010; 5 int n, k; 6 char s[maxn]; 7 int asc[257]; 8 9 int main() { 10 // freopen("in", "r", stdin); 11 int T; 12 scanf("%d", &T); 13 while(T--) { 14 scanf("%s", s); 15 scanf("%d", &k); 16 n = strlen(s); 17 int ret = 0; 18 int p = n - k; 19 for(int i = 0; i < p; i++) { 20 memset(asc, 0, sizeof(asc)); 21 for(int j = i; j < n; j+=p) asc[s[j]]++; 22 int tmp = 0; 23 for(int j = 0; j < 256; j++) { 24 tmp = max(tmp, asc[j]); 25 ret += asc[j]; 26 } 27 ret -= tmp; 28 } 29 printf("%d ", ret); 30 } 31 return 0; 32 }