给出一组等长的字符串S
求出字母序最小的字符串y,满足y和S的Hamming距离最小.
两个字符串的Hamming距离等于相同位置上不同字符的位置个数.
y和S的Hamming距离等于y和所有的Si的Hamming距离和.
对于每个位置j,求字符次数最多的S[i.j]输出就可以了.
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 55;
int n, m;
char str[maxn][1010];
int main(){
int T;
scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &m);
for (int i = 0; i < n; ++i){
scanf("%s", str[i]);
}
int ansV = 0;
for (int j = 0; j < m; ++j){
int conv[26] = {0};
int maxv = 0;
char ansC = 'A';
for (int i = 0; i < n; ++i){
int ch = str[i][j] - 'A';
conv[ch]++;
if(conv[ch] > maxv){
ansC = ch + 'A';
maxv = conv[ch];
}else if(conv[ch] == maxv && ch + 'A' < ansC){
ansC = ch + 'A';
}
}
printf("%c", ansC);
for (int i = 0; i < n; ++i){
ansV += str[i][j] != ansC;
}
}
printf("\n%d\n", ansV);
}
}