1 #include<iostream> 2 #include<stdio.h> 3 #include<cmath> 4 #include<string> 5 #include<cstring> 6 using namespace std; 7 const int maxn = 1010; 8 9 char str[maxn][maxn] = {0}; 10 11 int main(void) 12 { 13 int T, m, n; //T组数据,每组数据有m个长度为n的序列 14 cin >> T; 15 while (T--) 16 { 17 string cstr; 18 int count = 0; //计算距离 19 cin >> m >> n; 20 memset(str,0,sizeof(str)); //初始化 21 for (int i = 0; i < m; ++i) 22 { 23 for (int j = 0; j < n; ++j) 24 { 25 cin >> str[i][j]; 26 } 27 } 28 for (int k = 0; k < n; ++k) 29 { 30 int _max = 0; //列上的字符出现的最大次数 31 int vis[26] = {0}; 32 for (int kj = 0; kj < m; kj++) 33 { //如果想要统计有顺序的字符的个数,想可以在相应位置上 34 vis[str[kj][k] - 'A']++; //统计列上出现的次数 35 if (vis[str[kj][k]-'A'] >= _max) 36 _max = vis[str[kj][k]-'A']; 37 } 38 for (int k1 = 0; k1 < 26; k1++) //从前往后扫描最优字符 39 if (vis[k1] == _max){ 40 cstr += 'A'+ k1; //里'A'+k后就变成了到有最多数量的字符处,并赋给cstr, 41 break; //当字符数目相同的情况,由于我是从头扫描的,符合最优字符 42 } 43 count += m - _max; //一列的数目减去一列中元素最多出现的个数,就是剩下不同的数目 44 } //不同的数量记入总的距离里面 45 cout << cstr << endl; 46 cout << count << endl; 47 } 48 return 0; 49 }