zoukankan      html  css  js  c++  java
  • 紫书第三章训练1 E

    DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of four different nucleotides, namely Adenine, Thymine, Guanine, and Cytosine as shown in Figure 1. If we represent a nucleotide by its initial character, a DNA strand can be regarded as a long string (sequence of characters) consisting of the four characters
    A, T, G, and C. For example, assume we are given some part of a DNA strand which is composed of the following sequence of nucleotides:
    “Thymine-Adenine-Adenine-Cytosine-Thymine-Guanine-CytosineCytosine-Guanine-Adenine-Thymine”
    Then we can represent the above DNA strand with the string “TAACTGCCGAT.” The biologist Prof. Ahn found that a gene X commonly exists in the DNA strands of five different kinds of animals, namely dogs, cats, horses, cows, and monkeys. He also discovered that the DNA sequences of the gene X from each animal were very alike. See Figure 2.DNA sequence of gene X
    Cat: GCATATGGCTGTGCA
    Dog: GCAAATGGCTGTGCA
    Horse: GCTAATGGGTGTCCA
    Cow: GCAAATGGCTGTGCA
    Monkey: GCAAATCGGTGAGCA
    Figure 2. DNA sequences of gene X in five animals.Prof. Ahn thought that humans might also have the gene X and decided to search for the DNA sequence of X in human DNA. However, before searching, he should define a representative DNA sequence of gene X because its sequences are not exactly the same in the DNA of the five animals. He decided to use the Hamming distance to define the representative sequence.
    The Hamming distance is the number of different characters at each position from two strings of equal length. For example, assume we are given the two strings “AGCAT” and “GGAAT.” The Hamming distance of these two strings is 2 because the 1st and the 3rd characters of the two strings are different. Using the Hamming distance, we can define a representative string for a set of multiple strings of equal length. Given a set of strings S = {s1, . . . , sm} of length n, the consensus error between a string y of length n and the set S is the sum of the Hamming distances between y and each si in S. If the consensus error between y and S is the minimum among all possible strings y of length n, y is called a consensus string of S. For example, given the three strings “AGCAT” “AGACT” and “GGAAT” the consensus string of the given strings is “AGAAT” because the sum of the Hamming distances between “AGAAT” and the three strings is 3 which is minimal. (In this case, the consensus string is unique, but in general, there can be more than one consensus string.) We use the consensus string as a representative of the DNA sequence. For the example of Figure 2 above, a consensus string of gene X is “GCAAATGGCTGTGCA” and the consensus error is 7.
    Input
    Your program is to read from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case starts with a line containing two integers m and n which are separated by a single space. The integer m (4 ≤ m ≤ 50) represents the number of DNA sequences and n (4 ≤ n ≤ 1000) represents the length of the DNA sequences, respectively. In each of the next m lines, each DNA sequence is given.
    Output
    Your program is to write to standard output. Print the consensus string in the first line of each case and the consensus error in the second line of each case. If there exists more than one consensus string,print the lexicographically smallest consensus string.
    Sample Input
    3
    5 8
    TATGATAC
    TAAGCTAC
    AAAGATCC
    TGAGATAC
    TAAGATGT
    4 10
    ACGTACGTAC
    CCGTACGTAG
    GCGTACGTAT
    TCGTACGTAA
    6 10
    ATGTTACCAT
    AAGTTACGAT
    AACAAAGCAA
    AAGTTACCTT
    AAGTTACCAA
    TACTTACCAA
    Sample Output
    TAAGATAC
    7
    ACGTACGTAA
    6
    AAGTTACCAA
    12

    这道题很新潮的,竟然是了不起的DNA,AGCT好熟悉啊,所以题目背景就不用花时间去了解的。"If the consensu serror between y and S is the minimum among all possible strings y of length n, y is called a consensusstring of S."有个最小值貌似就是这个题的关键了,接下来我们来看看样例,输入了m行n列的字符串得到了一串,肯定是比较什么的,在观察并结合关键句上下的句子,找出其最可能的基因序列,其实就是保留每行出现最多的字母,如果相同按字典序优先输出,所以这部分实现比较容易的,ACGT就是字典序了直接观察就知道了,最后的那个数字由于自己打错了m,n一度怀疑自己理解错了题意,他的题意就是你错了几个,那就是总共个数减去对的。
    AC代码

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    char s[55][1005];
    int main()
    {int t;
    scanf("%d",&t);
    while(t--){
    	int m,n;
        scanf("%d%d",&m,&n);
        getchar();
        for(int i=0;i<m;i++)
        scanf("%s",s[i]);
        int f=0;
        for(int i=0;i<n;i++){
       	int a[4]={0};
       	for(int j=0;j<m;j++)
       	if(s[j][i]=='A')
       	a[0]++;
    	else if(s[j][i]=='C')
       	a[1]++;
       	else if(s[j][i]=='G')
       	a[2]++;
       	else if(s[j][i]=='T')
       	a[3]++;
       	int ma=max(a[3],max(a[2],max(a[0],a[1])));
       	f+=m-ma;
    	if(a[0]==ma)printf("A");
    	else if(a[1]==ma)printf("C");
    	else if(a[2]==ma)printf("G");
    	else if(a[3]==ma)printf("T");}
    	printf("
    %d
    ",f);
        }
    	
    	return 0;
    }
    
  • 相关阅读:
    使用netty实现im聊天
    使用rabbitmq实现集群im聊天服务器消息的路由
    springcloud feign使用
    10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户
    redis的rdb与aof持久化机制
    springcloud-zinpin的安装与使用
    kafka的基本安装与使用
    RabbitMq 实现延时队列-Springboot版本
    RabbitMq 基本命令
    Dcoker 安装 rabbitMq
  • 原文地址:https://www.cnblogs.com/BobHuang/p/6775479.html
Copyright © 2011-2022 走看看