POJ:DNA Sorting 特殊的排序

Description

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.

Input

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

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

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.

Sample Input

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

Sample Output

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

很有意思的题目, POJ的题目都感觉相当好。

按照排序度的高低来排序,排序的排序?呵呵

因为数据的特殊性,所以本题可以计算逆序数的方法,可以0MS通过的,不过这里我使用的方法是:

1 merge sort来计算排序度

2 继续使用归并排序,排好最终序列

二次归并排序啊,呵呵,最终运行速度是16MS,做不到0MS,但是可以运行在无数据特殊性的情况下,通用性高。

#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;  

struct DNA
{
    string s;
    int n;
    DNA(int i = 0, string ss = "") : n(i), s(ss){}
    bool operator<(const DNA &a) const
    {
        return n < a.n;
    }
};  

string biMerge(string &L, string &R, int &c)
{
    string s;
    unsigned i = 0, j = 0;
    while ( i < L.size() && j < R.size() )
    {
        if (L[i] <= R[j]) s.push_back(L[i++]);
        else
        {
            s.push_back(R[j++]);
            c += L.size() - i;
        }
    }
    if ( i < L.size() ) s.append(L.substr(i));
    else    s.append(R.substr(j));
    return s;
}  

void biSort(string &s, int &c)
{
    if (s.size() < 2) return ;
    int mid = ((s.size()-1)>>1);//错误:写成s.size()>>1  

    string L(s.substr(0, mid+1));
    biSort(L, c);  

    string R(s.substr(mid+1));
    biSort(R, c);  

    s = biMerge(L, R, c);
}  

void DNASorting()
{
    int Len = 0, T = 0, c = 0;
    cin>>Len>>T;
    vector<DNA> dnas(T);
    string t;
    for (int i = 0; i < T; i++)
    {
        cin>>t;
        dnas[i].s = t;
        c = 0;
        biSort(t, c);
        dnas[i].n = c;
    }
    sort(dnas.begin(), dnas.end());
    for (int i = 0; i < T; i++)
    {
        cout<<dnas[i].s<<endl;
    }
}  

int main()
{
    DNASorting();
    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, is
, of
, sequence
, The
sorted
sqlite 特殊排序、特殊字符排序、题目1185 特殊排序、重工和sorting的区别、sorting,以便于您获取更多的相关知识。

时间: 2024-10-03 13:11:30

POJ:DNA Sorting 特殊的排序的相关文章

[POJ] DNA Sorting

Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 83069 Accepted: 33428 Description 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 seq

poj 1094 Sorting It All Out(拓扑排序)

链接: http://poj.org/problem?id=1094 题目: Sorting It All Out Time Limit: 1000MS     Memory Limit: 10000K Total Submissions: 21532     Accepted: 7403 Description An ascending sorted sequence of distinct values is one in which some form of a less-than ope

poj 1007 DNA Sorting【逆序对】

终于可以说:没有那么水了(虽然还是很水)...... 关于逆序数的题目,开始用塑料的冒泡排序一直WA,后来自己写一个,终于过了,要求是稳定的!!!!!!! AC的代码: #include <stdio.h> #include <string.h> char DNA[105][55]; //输入原DNA序列 int visit[105]; int Inversion(int nTh,int len) { int i,j,count=0; for(i=0;i<len;i++) f

算法:poj 2392 Space Elevator(dp 排序+多重背包)

题目大意: 有n种砖头,每种砖头的高为h,数量为c, 且它放的最高位置不能超过a. 问这些砖 最高能够叠多高? 思路: 先把所有种类砖头按照a从大到小排序,然后直接套多重背包即可 . 代码: #include<iostream> #include<queue> #include<stack> #include<cstdio> #include<cstring> #include<cmath> #include<map> #

poj 1093 Sorting It All Out AOV网络+拓扑

          一道拓扑的题,只是每增加一条拓扑一次,要注意是否有人为添加的边,也就是同一时刻有没有多个可选项.         这题少加了个return 0,错了n次--注意细节.          非常简单的题,结果写了70多分钟--   /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include

使用vb.net 对 Windows Form 按列排序 ListView 项目

window|排序|项目 使用 Windows Form 按列排序 ListView 项目 摘要: 说明如何根据所单击的列在 Microsoft .NET 中的 ListView 控件提供项目排序. 简介 ListView 控件是显示文件系统信息和显示 XML 或数据库数据的非常好的方式.ListView 控件通常用于显示表示项目以及项目文本的图形图标.此外,ListView 控件还可以用于显示有关子项目中项目的其他信息.例如,如果 ListView 控件显示一列文件,您可以配置 ListVie

ASP.NET GirdView学习之三 排序

要先设置GridView的AllowSortring=true,这样当点击列标题的时候才能激发GridView的Sorting事件进行排序 1using System; 2using System.Data; 3using System.Configuration; 4using System.Collections; 5using System.Web; 6using System.Web.Security; 7using System.Web.UI; 8using System.Web.UI

Nature:用2斤DNA就能存储世界上所有的数据

◆ ◆ ◆ 前言 现代存储技术已经无法满足字节的海啸式增长,但是大自然也许已为这个难题提供了解决方案. 对尼克•高德曼(Nick Goldman)而言,用DNA来编码数据始于一个玩笑. 那是2011年的2月16日,星期三.高德曼正在德国汉堡的一个酒店里,与几个生物信息学家讨论如何解决铺天盖地而来的海量基因组序列以及其他数据的存储难题.他记得科学家们差不多要被传统计算技术的所耗费用和局限性难倒时,他们开始对其他方案开起了玩笑."我们想,会有什么能阻止我们用DNA来存储信息呢?" 这时,笑

排序算法总结

1.冒泡排序 冒泡排序是一种简单的排序方法,算法如下: 1. 首先将所有待排序的数字放入工作列表中. 2. 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换. 3. 重复2号步骤(倒数的数字加1.例如:第一次到倒数第二个数字,第二次到倒数第三个数字,依此类推...),直至再也不能交换. 用C语言实现如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int BubbleSort(int *a, int n)    //