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,很明显的暴力题目,没什么解题的方法就是暴力
代码:
思路:暴力
分析:
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; }
相关文章推荐
- 详细解答Uva - 1368 - DNA Consensus String
- DNA序列 (DNA Consensus String, ACM/ICPC Seoul 2006 UVa1368)
- UVa 1368 - DNA Consensus String
- UVa1368 DNA Consensus String
- UVa-1368 - DNA Consensus String
- UVA 1368 DNA Consensus String(水题)
- UVa 1368 DNA Consensus String
- UVA - 1368 DNA Consensus String
- UVA 1368 - DNA Consensus String
- DNA序列(DNA Consensus String, UVa 1368)算法
- DNA Consensus String UVA - 1368
- UVA 1368 DNA Consensus String
- UVa 1368 - DNA Consensus String【字符串】
- UVa 1368 - DNA Consensus String
- UVa 1368:DNA Consensus String
- UVa-1368 - DNA Consensus String
- DNA Consensus String UVA - 1368
- uva 1368 DNA Consensus String(检索)
- DNA Consensus String UVA - 1368
- UVa 1368 DNA Consensus String