您的位置:首页 > 其它

UVa 1368 - DNA Consensus String

2017-02-21 11:34 531 查看
題目:有m個長度為n的DNA序列,求一個DNA序列,是的它到所有其他序列的海明距離總和最小。

            (兩個串海明距離為,元素不同的位數)

分析:字符串。直接統計每位四個字母出現的次數,找到出現最多的就是解。

說明:如果個數相同取字典序小的。

#include <stdio.h>
#include <stdlib.h>

char DNA[50][1001];
int bit[128];

int get_bit(char c)
{
return bit[c] >= bit['A'] && bit[c] >= bit['G']
&& bit[c] >= bit['T'] && bit[c] >= bit['C'];
}

int main()
{
int T, m, n;
while (~scanf("%d",&T))
while (T --) {
scanf("%d%d",&m,&n);
for (int i = 0; i < m; ++ i) {
scanf("%s",DNA[i]);
}
int ans = 0;
for (int i = 0; i < n; ++ i) {
bit['A'] = bit['G'] = bit['T'] = bit['C'] = 0;
for (int j = 0; j < m; ++ j) {
bit[DNA[j][i]] ++;
}
if (get_bit('A')) {
ans += m-bit['A'];
printf("%c",'A');
}else if (get_bit('C')) {
ans += m-bit['C'];
printf("%c",'C');
}else if (get_bit('G')) {
ans += m-bit['G'];
printf("%c",'G');
}else if (get_bit('T')) {
ans += m-bit['T'];
printf("%c",'T');
}
}
printf("\n%d\n",ans);
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: