题意:给出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 }