题记:多解时要按字典序输出
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char str[51][1001];
char ans[1001];
struct node
{
char c;
int a;
};
bool cmp(node q, node w)
{
return q.a > w.a;
}
int main()
{
int t, n, m, i, j, k;
node node[4];
node[0].c = 'A', node[1].c = 'T', node[2].c = 'C', node[3].c = 'G';
node[0].a = 0, node[1].a = 0, node[2].a = 0, node[3].a = 0;
cin >> t;
while (t--)
{
cin >> m >> n;
for (i = 0; i < m; i++)
{
cin >> str[i];
}
int sum = 0;
for (i = 0; i < n; i++)
{
node[0].c = 'A', node[1].c = 'T', node[2].c = 'C', node[3].c = 'G';
node[0].a = 0, node[1].a = 0, node[2].a = 0, node[3].a = 0;
int flag = 0;
for (j = 0; j < m; j++)
{
if (str[j][i] == 'A')node[0].a++;
else if (str[j][i] == 'T')node[1].a++;
else if (str[j][i] == 'C')node[2].a++;
else if (str[j][i] == 'G')node[3].a++;
}
sort(node,node+4, cmp);
if (node[0].a != m)
sum += node[1].a + node[2].a + node[3].a;
ans[i] = node[0].c;
for (j = 1; j < 4; j++)
{
if (node[j].a == node[0].a)
{
ans[i] = node[0].c < node[j].c ? node[0].c : node[j].c;
}
else
break;
}
}
for (i = 0; i < n; i++)
cout << ans[i];
cout << endl;
cout << sum << endl;
}
return 0;
}