题意:找出与输入的这些串差别最小的串,我们试着去枚举每一个位置,然后找到差别最小的字符,依次类推
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1100;
char str[60][MAXN],ans[MAXN];
char dna[] = {'A','C','G','T'};
int n,m,t;
int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&m,&n);
gets(ans);
for (int i = 0 ; i < m ; i++)
gets(str[i]);
int sum = 0 ;
for (int i = 0 ; i < n ; i++)
{
int index = 0 ;
int temp = m + 10;
for (int k = 4 ; k >= 0 ; k--)
{
int ham=0;
for (int j = 0 ; j < m ; j++)
{
ham = ham+(dna[k]!=str[j][i]);
}
if (temp >= ham) //从字典序递减的开始凑,便于在sum相等的时候,取最小字典序
{
temp = ham;
index = k;
}
}
sum += temp;
ans[i] = dna[index];
}
ans[n] = '\0';
printf("%s\n%d\n",ans,sum);
}
return 0;
}