3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
2017-05-23 13:38
609 查看
输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量
小。 两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的
Hamming距离为2(左数第1, 4个字符不同)。
输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为n的DNA序列(只包含字母
A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。
如有多
解,要求为字典序最小的解。 例如,对于下面5个DNA序列,最优解为TAAGATAC。
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
将A,C,G,T看成是0,1,2,3;
定义一个数组int ans[4][50];
对于每一行的输入,1<=i<=m;
ans[字母][i]++;
这样就记录了每一列每种字母出现的总次数;
最后遍历ans的每一列 把每一列的第一个最大值所在行转换成字母
合起来就是最优解;
总行数减去字母出现最多的字母数在第一列到第n列求和就是hamming值
小。 两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的
Hamming距离为2(左数第1, 4个字符不同)。
输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为n的DNA序列(只包含字母
A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。
如有多
解,要求为字典序最小的解。 例如,对于下面5个DNA序列,最优解为TAAGATAC。
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
将A,C,G,T看成是0,1,2,3;
定义一个数组int ans[4][50];
对于每一行的输入,1<=i<=m;
ans[字母][i]++;
这样就记录了每一列每种字母出现的总次数;
最后遍历ans的每一列 把每一列的第一个最大值所在行转换成字母
合起来就是最优解;
总行数减去字母出现最多的字母数在第一列到第n列求和就是hamming值
#include <bits/stdc++.h> using namespace std; int ans[4][1000];//放次数的数组 char DNA[50][1000]; //放输入DNA的数组 char mDNA[1000]; //放最优解得数组 int T,m,n; map<char,int> m1; char zimu[4]={'A','C','G','T'}; int main() { //freopen("input.txt","r",stdin); m1['A']=0; m1['C']=1; m1['G']=2; m1['T']=3; scanf("%d",&T); while(T>0){ int len=0; scanf("%d%d",&m,&n); getchar(); memset(ans,0,sizeof(ans)); for(int i=0;i<m;i++){ int j=0; char c; while((c=getchar())!='\n'&&j<n){ int pos=0; switch(c){ case 'A': pos=0;break; case 'C': pos=1;break; case 'G': pos=2;break; case 'T': pos=3;break; } ans[pos][j]++; j++; } } int max1; int pos1; for(int i=0;i<n;i++){ max1=ans[0][i]; pos1=0; for(int j=0;j<4;j++){ if(ans[j][i]>max1){ max1=ans[j][i]; pos1=j; } } len+=m-max1; mDNA[i]=zimu[pos1]; } for(int i=0;i<n;i++){ putchar(mDNA[i]); } printf("\n%d\n",len); T--; } return 0; }
相关文章推荐
- DNA序列 (DNA Consensus String, ACM/ICPC Seoul 2006 UVa1368)
- DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
- DNA序列(DNA Consensus String, ACM/ICPC seoul 2006, UVa 1368)
- UVA 1368 DNA Consensus String【ACM/ICPC Seoul 2006】
- DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368
- Seoul 2006 / UVa 1368 DNA Consensus String (字符串处理)
- 《算法竞赛入门经典2ndEdition 》习题3-7 DNA序列(DNA Consensus String, Uva1368)
- DNA序列(DNA Consensus String, UVa 1368)算法
- UVa 1368 DNA Consensus String (DNA序列)
- UVa 1368 DNA Consensus String(DNA序列)
- 小紫书 习题 3-7(UVA 1368) DNA序列(DNA Consensus String)
- UVa1368/ZOJ3132 DNA Consensus String
- uva 1368 - DNA Consensus String(贪心)
- uva 1368 - DNA Consensus String
- UVA - 1368 DNA Consensus String
- 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(贪心)