0
点赞
收藏
分享

微信扫一扫

LA3602DNA序列

止止_8fc8 2022-07-27 阅读 17

题意:
     给你一个一些DNA序列(只有ACGT)然后让你构造一个序列,使得所有的序列到他的Hamming距离最小,所有的序列包括构造的序列长度都是N,Hamming表示两个序列的不同字符位置个数,比如ACCT AACA 第二个和第四个位置不同,所以距离是2.


思路:
     简单题目,我们一位一位构建,每一位都是独立的,我们选择出现次数最多的字母(如果最多的不止一个,那么我们选择ASCII小的)作为答案,其他的和加到总的距离里面去。

#include<stdio.h>

#include<string.h>



char map[55][1100];

char Ans[1100];



int main ()

{

int t ,n ,m ,i ,j ,sum;

int A ,T ,G ,C;

scanf("%d" ,&t);

while(t--)

{

scanf("%d %d" ,&n ,&m);

for(i = 1 ;i <= n ;i ++)

scanf("%s" ,&map[i]);

sum = 0;

for(i = 1 ;i <= m ;i ++)

{

A = G = C = T = 0;

for(j = 1 ;j <= n ;j ++)

if(map[j][i-1] == 'A') A ++;

else if(map[j][i-1] == 'G') G ++;

else if(map[j][i-1] == 'C') C ++;

else T ++;

int max = A;

char ch = 'A';

if(max < C) max = C ,ch = 'C';

if(max < G) max = G ,ch = 'G';

if(max < T) max = T ,ch = 'T';

Ans[i-1] = ch;

sum = sum + A + G + C + T - max;

}

Ans[m] = '\0';

puts(Ans);

printf("%d\n" ,sum);



}

return 0;

}

举报

相关推荐

0 条评论