zoukankan      html  css  js  c++  java
  • uva1368 (DNA Consensus String)

    /*
    本题题意:
        输入n个长度均为m的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小。、
        两个等长字符串的Hamming距离等于字符不同的位置个数,eg: ACGT和GCGA的Hamming距离为2(左数第1, 4个字符不同)。
        输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),
        输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多解,要求为字典序最小的解。
    本题思路:
        求出最短的序列和, 将所有的序列排列为一个矩阵, 取每列中出现最多的字符, 取出每列出现最多的字符 构成的序列
        就是最短的Hamming距离, 字符最多, 那么Hamming距离就越小
        具体实现看代码:
    */

    #include<bits/stdc++.h>
    using namespace std;
    int c[4][1005];
    int main() {
        int cnt, n, M; // M是给定序列的长度 
        map<char, int> m;
        char cha[4] = {'A', 'C', 'G', 'T'};
        m['A'] = 0; m['C'] = 1; m['G'] = 2; m['T'] = 3;
        scanf("%d", &cnt); // 判断的组数 
        while(cnt--) {
            memset(c, 0, sizeof(c));
    //        fill(c[0] + 0, c[0] + 4 * 1005, 0);  //需要初始化二维数组 
            scanf("%d%d", &n, &M); // n 行 M为序列的长度 
            getchar();
            for(int i = 0; i < n; i++) {
                for(int j = 0; j < M; j++) {
                    char letter;
                    scanf("%c", &letter); // 输入字符
                    c[m[letter]][j]++;
                }
                getchar();    
            }
            int res = 0; // 记录最终的结果 
            for(int i = 0; i < M; i++) {
                int max = 0, u = 0; // 分别记录第i列序列中最大的字符数量与 cha字符的下标位置 
                for(int j = 0; j < 4; j++) {
                    
                    if(c[j][i] > max) {
                        max = c[j][i];
                        u = j; //
                    }
                }
                res += n - max; // 此处是行的高度 - 最大的字符数量求出ham距离 
                printf("%c", cha[u]);
            }
            printf("
    %d
    ", res);
        } 
        return 0;
    }
  • 相关阅读:
    How to produce the first draft of research paper?
    ETL
    BDA chapter 10
    <转>Java转iOS-第一个项目总结(2):遇到问题和解决方案
    <转>从Java转iOS第一个项目总结
    (转)总结iOS 8和Xcode 6的各种坑
    iOS开发之Xcode6之后不再自动创建Pch预编译文件,该如何解决这个问题?
    iOS开发:Objective-C中通知与协议的区别?
    PT和PX是什么鬼?
    使用cocoaPods经常出现的问题以及解决方案
  • 原文地址:https://www.cnblogs.com/csyxdh/p/12028502.html
Copyright © 2011-2022 走看看