算法竞赛入门经典(紫书)第三章——DNA Consensus String UVA-1368
2018-02-09 22:31
435 查看
题意:
题目要求给出一组长度为 n 的字符串,计算得出一个新的字符串,使得这个新的字符串和这一组字符串的汉明距离之和最小。
思路:
依据题意,汉明距离指的就是两个字符串中对应位置字符不同的个数。
现在要使一个字符串和一组字符串的汉明距离最小,即使这个字符串和这一组字符串对应位置字符不同的情况最少化。容易想到,新字符串的每个位置上只要取的是一组字符串的该位置上出现的最多的那个字母即可。
至于计算汉明距离之和,可以对于每个位置,拿出现在该位置上的字母之和减去出现最多字母的个数。
代码:
想看书上的源代码的话看这 (^▽^)
https://github.com/aoapc-book/aoapc-bac2nd
题目要求给出一组长度为 n 的字符串,计算得出一个新的字符串,使得这个新的字符串和这一组字符串的汉明距离之和最小。
思路:
依据题意,汉明距离指的就是两个字符串中对应位置字符不同的个数。
现在要使一个字符串和一组字符串的汉明距离最小,即使这个字符串和这一组字符串对应位置字符不同的情况最少化。容易想到,新字符串的每个位置上只要取的是一组字符串的该位置上出现的最多的那个字母即可。
至于计算汉明距离之和,可以对于每个位置,拿出现在该位置上的字母之和减去出现最多字母的个数。
代码:
#include<cstdio> #include<cstring> #include<cstdlib> #include<stack> #include<queue> #include<utility> #include<vector> #include<cmath> #include<set> #include<map> #include<iostream> #include<algorithm> #include<sstream> using namespace std; typedef long long LL; int T; int m, n; char ch[1010]; int num[1010][5]; //0 下标表示 A,1 下标表示 C,2 下标表示 G,3 下标表示 T int Find(int x) //找出该位置上出现最多的是哪个字母,并返回其下标 { int p = 0; int mx = num[x][p]; for(int i=1; i<4; i++){ if(num[x][i] > mx){ //由于事先已经按照字典序排好下标,所以只要比较大小就可以了 p = i; mx = num[x][p]; } } return p; } int main() { //freopen("in.txt", "r", stdin); scanf("%d", &T); while(T--){ memset(num, 0, sizeof(num)); scanf("%d%d", &m, &n); for(int i=0; i<m; i++){ scanf("%s", ch); for(int j=0; j<n; j++){ switch(ch[j]){ //记录下该组字符串该位置上出现的每个字母的个数 case 'A': num[j][0]++; break; case 'C': num[j][1]++; break; case 'G': num[j][2]++; break; case 'T': num[j][3]++; break; } } } int ans = 0; for(int i=0; i<n; i++){ int mx = Find(i); //得到出现次数最多的并字典序最小的字母的下标 switch(mx){ case 0: putchar('A'); break; case 1: putchar('C'); break; case 2: putchar('G'); break; case 3: putchar('T'); break; } ans += m-num[i][mx]; //计算该位置上的不同字符的数量 } printf("\n"); printf("%d\n", ans); } return 0; }
想看书上的源代码的话看这 (^▽^)
https://github.com/aoapc-book/aoapc-bac2nd
相关文章推荐
- 算法竞赛入门经典第三章3-7 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(贪心)
- UVA - 1368 DNA Consensus String
- UVA 1368 DNA Consensus String【ACM/ICPC Seoul 2006】
- UVA 1368 DNA Consensus String
- uva1368 - DNA Consensus String
- UVA - 1368 DNA Consensus String
- UVA1368 UVALive3602 ZOJ3132 DNA Consensus String
- 小紫书 习题 3-7(UVA 1368) DNA序列(DNA Consensus String)
- UVa 1368 - DNA Consensus String
- UVa 1368 - DNA Consensus String
- UVA1368 - DNA Consensus String
- UVA 1368 DNA Consensus String
- (入门)uva 1368 DNA Consensus String
- UVa 1368 DNA Consensus String (DNA序列)
- Uva.1368 DNA Consensus String