美文网首页
UVA 1368 DNA Consensus String

UVA 1368 DNA Consensus String

作者: iamkai | 来源:发表于2016-11-18 17:49 被阅读0次

Problem

http://write.blog.csdn.net/postlist

Thinking

題意為給定很多個字串, 找出一個字串跟這些字串hamming distance的加總最小, 並印出此hamming distance加總

假如有五個字串如下

    12345678
    TATGATAC
    TAAGCTAC
    AAAGATCC
    TGAGATAC
    TAAGATGT
    --------
    TAAGATAC

為什麼TAAGATAC為解答,仔細看

  • 第一個column, T是最多的
  • 第二個column, A是最多的
  • 第三個column, A是最多的
  • 第三個column, G是最多的
    etc...

所以做法就是遍歷每一個column的時候, 用一個table記錄ACTG個別出現次數, 並找出常出現的

Solution

//uva 1368 DNA Consensus String
#include<iostream>


typedef enum{A=0,C=1,G=2,T=3}e;
char DNAChar[4] = {'A','C','G','T'};
using namespace std;


int main()
{
    int testcase;
    cin >> testcase;
    while(testcase > 0)
    {
        //initialize
        int m,length;
        cin >> m >> length;
        string *DNAs = new string[m];
        
        string AnsDNA;
        int HammingDist = 0;
    
        for(int i = 0 ; i < m ; i++)
            cin >> DNAs[i];

        
        for(int i = 0 ; i < length ; i++)
        {
            //使用table計算ACTG個數
            int table[4] = {0};
            for(int j = 0; j < m ; j++)
            {
                switch (DNAs[j][i]) 
                {
                    case 'A':
                        table[A]++;
                        break;
                    case 'C':
                        table[C]++;
                        break;
                    case 'G':
                        table[G]++;
                        break;
                    case 'T':
                        table[T]++;
                        break;
                        
                    default:
                        break;
                }//end of switch
            }//end of j
            
            
            //find max element and max element index
            /*因為ACTG本身就是字典排列, 所以就算table統計出來都一樣, max一樣是取字典順序最小的, 若ACTG統計結果個數皆一樣, 以下程式則會取A */
            int maxChar = 0;
            for(int j = 0 ; j < 4 ; j++)
            {
                if(table[maxChar] < table[j])
                    maxChar = j;
            }
            
            //將解答字元串接起來
            AnsDNA.push_back(DNAChar[maxChar]);
           
            // calculate Hamming distance
            HammingDist = HammingDist + m - table[maxChar];
        }//end of i
        
        cout << AnsDNA << endl;
        cout << HammingDist << endl;
        
        testcase--;
    }
}

相关文章

  • UVA 1368 DNA Consensus String

    Problem http://write.blog.csdn.net/postlist Thinking 題意為給...

  • 紫外线的伤害

    紫外线分为UVA、UVB 1.UVA的伤害 短期:使得皮肤变黑,产生色斑 长期:损害细胞DNA,加速皮肤老化 2....

  • Uva(1437)(String painter)

    链接:https://vjudge.net/problem/UVA-1437思路:想了半天也没啥思路,总感觉贪心能...

  • 分子克隆知识

    Kozak consensus sequence (Kozak consensus or Kozak sequen...

  • 素数练习题

    UVA 10375 UVA 10791 UVA10375 Choose and divide 题解 先素数打表,然...

  • 有趣的数学题

    UVA12716 UVA11582 UVA12716 GCD XOR 题解 参考这题用到2个结论a ^ b = c...

  • Consensus

    为什么共识是重要的?共识的作用是什么? 1. Applications 可靠的全序广播 故障检测 领导选举 分布式...

  • Raft Inside CockroachDB

    consensus algorithm

  • tendermint consensus 代码分析

    Tendermint最核心的代码位于consensus包下,consensus下的文件是tendermint最大的...

  • 字典树

    UVA 11488题目链接https://uva.onlinejudge.org/index.php?option...

网友评论

      本文标题:UVA 1368 DNA Consensus String

      本文链接:https://www.haomeiwen.com/subject/bnkspttx.html