/*
给定m个长度为n的字符串,使得Hamming距离尽量小
Hamming指两个字符串对应位置字符不同的个数
有多解,求字典序最小的字符串
*/
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
char map[1010];
struct node
{
int A;
int C;
int G,T;
}a[1010];
int main()
{
int n,m;
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
char ans[1010]={};
memset(a,0,sizeof(a));
for(i=0;i<m;i++)
{
scanf("%s",&map);
for(j=0;j<n;j++)
{
if(map[j]=='A')
a[j].A++;
else if(map[j]=='C')
a[j].C++;
else if(map[j]=='G')
a[j].G++;
else
a[j].T++;
}
}
int count=0;
int max;
for(j=0;j<n;j++)
{
max=a[j].A;
ans[j]='A';
if(a[j].C>max) {max=a[j].C;ans[j]='C';}
if(a[j].G>max) {max=a[j].G;ans[j]='G';}
if(a[j].T>max) {max=a[j].T;ans[j]='T';}
// printf("%d+++%d ++++%d\n",m,max,m-max);
count+=(m-max);
}
//ans[m]='/0';
printf("%s\n%d\n",ans,count);
}
// for(;;);
return 0;
}
UVa 1368 DNA Consensus String
最新推荐文章于 2023-12-02 15:58:17 发布