这个题要求求出一个DNA序列使得其到各序列的距离最小,如果答案有多组找字典序最小的。
依次找到最优解就好。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=10e4+10;
char map[60][maxn];
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",map[i]);
char str[maxn];
int ans=0;
for(int i=0;i<m;i++)
{
int ita=0,itb=0,itc=0,itd=0;
for(int j=0;j<n;j++)
{
switch(map[j][i])
{
case 'A': ita++;break;
case 'C': itb++;break;
case 'G': itc++;break;
case 'T': itd++;break;
}
}
if(ita>=itb&&ita>=itc&&ita>=itd)
{ str[i]='A';ans+=n-ita;}
else if(itb>=ita&&itb>=itc&&itb>=itd)
{ str[i]='C';ans+=n-itb;}
else if(itc>=ita&&itc>=itb&&itc>=itd)
{ str[i]='G';ans+=n-itc;}
else
{ str[i]='T';ans+=n-itd;}
}
str[m]='\0';
printf("%s\n%d\n",str,ans);
}
return 0;
}