这题刚开始居然没理解题意
给了一个DNA距离的定义
就是同位置值碱基对(好吧就是一个char)不同的个数
然后给你m个长n的DNA串
一开始理解为求到最后一个距离最短的序列
然后样例过不了。。
再然后仔细看了一遍题目
是求到所有的DNA串距离和最短的DNA串
思路嘛,统计每一个位置出现的字符的数目
找到最多的那个,如果有两个一样。。字典序走你
至于怎么想出来的~~
草稿纸大法好
get了max_element对多维数组及以上的用法
不对,是多维数组在内存的储存方式
#include<cstdio>
#include<algorithm>
using namespace std;
char c[5]="ACGT";
int main(){
int t;
scanf("%d",&t);
int n,m;
while(t-- && ~scanf("%d %d",&m,&n)){ //m ¸öÊý n³¤¶È
int a[1005][4]={0};
char te[1005];
for(int i=0;i<m;i++){
scanf("%s",&te);
for(int j=0;j<n;j++){
switch(te[j]){
case 'A':
a[j][0]++;
break;
case 'C':
a[j][1]++;
break;
case 'G':
a[j][2]++;
break;
case 'T':
a[j][3]++;
break;
default:
break;
}
}
}
int all=m*n;
for(int i=0;i<n;i++){
int ma=max_element(a[i],a[i]+4)-a[i];
printf("%c",c[ma]);
all-=a[i][ma];
}
printf("\n%d\n",all);
}
return 0;
}