DNA Consensus String UVA - 1368
2018-02-05 17:07
399 查看
题目大意:
给定m个长度为 n 的DNA序列,求一个 DNA 序列,使其到所有序列的总hamming距离尽量小,如有多解,输出最小解。(两个等长字符串的hamming距离等于字符不同的位置个数)
思路:因为每个DNA序列都是相同长度的,所以可以枚举每一位DNA码,然后用贪心的思想选取出现次数最多的,如果有两个最多的,按要求用字典序小的。
ac代码:
4000
给定m个长度为 n 的DNA序列,求一个 DNA 序列,使其到所有序列的总hamming距离尽量小,如有多解,输出最小解。(两个等长字符串的hamming距离等于字符不同的位置个数)
思路:因为每个DNA序列都是相同长度的,所以可以枚举每一位DNA码,然后用贪心的思想选取出现次数最多的,如果有两个最多的,按要求用字典序小的。
ac代码:
#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<map> #include<iomanip> #define ll long long using namespace std; int m,n,d[105]; string s[105]; void solve() { int ans = 0; for(int i = 0; i < n; i++) { int MAX = -1,id; memset(d, 0, sizeof(d)); for(int j = 0; j < m; j++) { int tem = s[j][i] - 'A'; d[tem] ++; if(d[tem] > MAX) { MAX = d[tem]; id = tem; } else if(d[tem] == MAX&& tem < id) id = tem; } ans += m - MAX; printf("%c",id + 'A'); } printf("\n%d\n",ans); } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); for(int i = 0; i < m; i++) cin >> s[i]; solve(); } }
4000
相关文章推荐
- (入门)uva 1368 DNA Consensus String
- UVA-1368-DNA Consensus String 基础题 贪心 模拟 详细注释
- DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
- Uva 1368 DNA Consensus String
- DNA序列 (DNA Consensus String, ACM/ICPC Seoul 2006 UVa1368)
- Uva.1368 DNA Consensus String
- UVa 1368 DNA Consensus String
- UVa 1368 DNA Consensus String(贪心+计数)
- 算法竞赛入门经典第三章3-7 DNA Consensus String UVA - 1368
- UVA - 1368 DNA Consensus String
- UVa1368 DNA Consensus String
- uva 1368 DNA Consensus String
- LA 3602 UVA 1368 - DNA Consensus String
- Uva1368 DNA Consensus String
- uva 1368 DNA Consensus String
- 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