您的位置:首页 > 其它

uva 1368 DNA Consensus String

2013-03-19 15:45 435 查看
点击打开链接uva 1368

思路:暴力

分析:

1 给定m个长度均为n的DNA序列,求一个DNA使其所有的序列的

Hamming distances最小,如果有多个解输出字典序最小的序列

2 m最大为50,n最大为1000,很明显的暴力题目,没什么解题的方法就是暴力

代码:


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N = 100;
const int maxn = 1010;
const char ch[4] = {'A' , 'C' , 'G' , 'T'};
char str
[maxn];

//得到下标
int getIndex(char c){
for(int i = 0 ; i < 4 ; i++)
if(c == ch[i])
return i;
}

//得到最大的值的下标
int getMax(int *num){
int pos = 0;
for(int i = 1 ; i < 4 ; i++)
if(num[i] > num[pos])
pos = i;
return pos;
}

void solve(int m , int n){
int num[4];
int ans = 0;
char ansStr[maxn];
memset(ansStr , '\0' , sizeof(ansStr));
for(int i = 0 ; i < n ; i++){
memset(num , 0 , sizeof(num));
for(int j = 0 ; j < m ; j++)
num[getIndex(str[j][i])]++;
int maxIndex = getMax(num);
ansStr[i] = ch[maxIndex];
ans += m-(num[maxIndex]);
}
printf("%s\n%d\n" , ansStr , ans);
}

int main(){
int Case , m , n;
scanf("%d" , &Case);
while(Case--){
scanf("%d%d" , &m , &n);
for(int i = 0 ; i < m ; i++)
scanf("%s" , str[i]);
solve(m , n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: