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("\n");

50         printf("%d\n",ans);

51     }

52 }
View Code

 

你可能感兴趣的:(String)