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 }