题目链接:Uva1368-DNA Consensus String
题目大意: 输入m个长度为n的DNA序列,构造一个DNA序列,使得这个DNA序列与m个DNA序列的Hamming距离之和最小。若有多个解,输出字典序最小的解。
import java.util.*;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] ACGT=new int[4];
char[][] seq=null;
char[] ans=null;
int t,m,n;
int sum;
Scanner in=new Scanner(System.in);
t=in.nextInt();
while((t--)!=0){
m=in.nextInt();
n=in.nextInt();
seq=new char[m][n];
ans=new char[n];
String temp=new String();
for(int i=0;i<m;i++){
temp=in.next();
seq[i]=temp.toCharArray();
}
sum=0;
for(int i=0;i<n;i++){
Arrays.fill(ACGT, 0);
for(int j=0;j<m;j++)
{
if(seq[j][i]=='A')
ACGT[0]++;
if(seq[j][i]=='C')
ACGT[1]++;
if(seq[j][i]=='G')
ACGT[2]++;
if(seq[j][i]=='T')
ACGT[3]++;
}
int max=ACGT[0];
int index=0;
for(int k=0;k<4;k++)
if(ACGT[k]>max)
{
max=ACGT[k];
index=k;
}
for(int k=0;k<4;k++)
if(k!=index)
{
sum=sum+ACGT[k];
}
if(index==0)
ans[i]='A';
if(index==1)
ans[i]='C';
if(index==2)
ans[i]='G';
if(index==3)
ans[i]='T';
}
System.out.println(ans);
System.out.println(sum);
}
}
}