Uva-1368-DNA Consensus String

来源:互联网 发布:微信网页授权java代码 编辑:程序博客网 时间:2024/04/30 05:57

这个题要求求出一个DNA序列使得其到各序列的距离最小,如果答案有多组找字典序最小的。

依次找到最优解就好。

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=10e4+10;char map[60][maxn];int main(){    int cas;    scanf("%d",&cas);    while(cas--)    {int n,m;scanf("%d%d",&n,&m);for(int i=0;i<n;i++)    scanf("%s",map[i]);char str[maxn];int ans=0;for(int i=0;i<m;i++){    int ita=0,itb=0,itc=0,itd=0;    for(int j=0;j<n;j++)    {switch(map[j][i]){    case 'A': ita++;break;    case 'C': itb++;break;    case 'G': itc++;break;    case 'T': itd++;break;}    }    if(ita>=itb&&ita>=itc&&ita>=itd)    {str[i]='A';ans+=n-ita;}    else if(itb>=ita&&itb>=itc&&itb>=itd)    {str[i]='C';ans+=n-itb;}    else if(itc>=ita&&itc>=itb&&itc>=itd)    {str[i]='G';ans+=n-itc;}    else    {str[i]='T';ans+=n-itd;}}str[m]='\0';printf("%s\n%d\n",str,ans);    }    return 0;}


原创粉丝点击