UVa 1368 DNA Consensus String

题意:给出n个长度为len的DNA序列,求一个DNA序列,使得该序列到这m个DNA序列的距离尽量短,两个等长字符串的字符不同的位置个数即为两个字符串之间的距离

记录下每个位置出现次数最多的字母,再扫一遍这n个串,求出距离

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath>   
 5 #include<algorithm>  
 6 using namespace std;
 7 
 8 typedef long long LL;
 9 char s[55][1005],t[1005];
10 int cnt[1005][105],num[1005];
11 
12 int main()
13 {
14     int ncase,i,j,k,ans,n,len;
15     scanf("%d",&ncase);
16     while(ncase--)
17     {
18         memset(cnt,0,sizeof(cnt));
19         memset(num,0,sizeof(num));
20         scanf("%d %d",&n,&len);
21         for(i=0;i<n;i++) cin>>s[i];
22         
23         for(i=0;i<n;i++)
24         {
25             for(j=0;j<len;j++)
26             cnt[j][s[i][j]-'A']++;
27         }
28         
29         for(j=0;j<len;j++){
30             int max=-1;
31             for(k=0;k<100;k++){
32                 if(cnt[j][k]>max){
33                     max=cnt[j][k];
34                     t[j]=k+'A';    
35                     num[j]=max;                
36                 }
37                 
38             }
39         }
40         
41         int ans=0;
42         for(i=0;i<n;i++){
43             for(j=0;j<len;j++){
44                 if(s[i][j]!=t[j]) ans++;;
45             }
46         }
47         
48         for(j=0;j<len;j++) printf("%c",t[j]);
49         printf("
");
50         printf("%d
",ans);
51     }
52 }
View Code
原文地址:https://www.cnblogs.com/wuyuewoniu/p/4311093.html