• [POJ1007]DNA Sorting


    [POJ1007]DNA Sorting

    试题描述

    One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG'' has only one inversion (E and D)---it is nearly sorted---while the sequence ``ZWQM'' has 6 inversions (it is as unsorted as can be---exactly the reverse of sorted). 

    You are responsible for cataloguing a sequence of DNA strings (sequences containing only the four letters A, C, G, and T). However, you want to catalog them, not in alphabetical order, but rather in order of ``sortedness'', from ``most sorted'' to ``least sorted''. All the strings are of the same length. 

    输入

    The first line contains two integers: a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (0 < m <= 100) giving the number of strings. These are followed by m lines, each containing a string of length n.

    输出

    Output the list of input strings, arranged from ``most sorted'' to ``least sorted''. Since two strings can be equally sorted, then output them according to the orginal order.

    输入示例

    10 6
    AACATGAAGG
    TTTTGGCCAA
    TTTGGCCAAA
    GATCAGATTT
    CCCGGGGGGA
    ATCGATGCAT

    输出示例

    CCCGGGGGGA
    AACATGAAGG
    GATCAGATTT
    ATCGATGCAT
    TTTTGGCCAA
    TTTGGCCAAA

    数据规模及约定

    见“输入

    题解?

    做这题练英语玩玩。并不知道这题跟 DNA 有毛关系。。。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <vector>
    #include <queue>
    #include <cstring>
    #include <string>
    #include <map>
    #include <set>
    using namespace std;
    
    const int BufferSize = 1 << 16;
    char buffer[BufferSize], *Head, *Tail;
    inline char Getchar() {
        if(Head == Tail) {
            int l = fread(buffer, 1, BufferSize, stdin);
            Tail = (Head = buffer) + l;
        }
        return *Head++;
    }
    int read() {
        int x = 0, f = 1; char c = getchar();
        while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
        while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
        return x * f;
    }
    
    #define maxn 110
    #define maxl 60
    int n, l;
    char S[maxn][maxl];
    
    vector <int> id[maxn*maxn];
    void process(int x) {
    	int A = 0, C = 0, G = 0, sum = 0;
    	for(int i = l; i >= 1; i--) {
    		if(S[x][i] == 'A') A++;
    		if(S[x][i] == 'C') sum += A, C++;
    		if(S[x][i] == 'G') sum += A + C, G++;
    		if(S[x][i] == 'T') sum += A + C + G;
    	}
    	id[sum].push_back(x);
    	return ;
    }
    
    int main() {
    	l = read(); n = read();
    	for(int i = 1; i <= n; i++) scanf("%s", S[i] + 1), process(i);
    	
    	for(int i = 0; i <= l * l; i++)
    		for(int j = 0; j < id[i].size(); j++) printf("%s
    ", S[id[i][j]] + 1);
    	
    	return 0;
    }
    
  • 相关阅读:
    TCP软件环境测试
    MTK6261之检测是否插了T卡
    java实现MD5加密
    Lrucache缓存技术
    Android自定义UI模板
    《富爸爸,穷爸爸》读后感——怎么实现财务自由
    JAVA双向链表
    写一个查找算法找出数组中相同的元素
    二分查找算法(JAVA)
    Android查询系统的音频(音乐播放器的核心)
  • 原文地址:https://www.cnblogs.com/xiao-ju-ruo-xjr/p/5813812.html
Copyright © 2020-2023  润新知