栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

DNA排序(C++) kkmd66

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DNA排序(C++) kkmd66

Description:

序列“未排序程度”的一个计算方式是元素乱序的元素对个数。例如:在序列’‘DAABEC’‘中,因为D>A,D>A,D>B,D>C,E>C,所以计算结果为5。这种计算方法称为序列的逆序数。序列’‘AACEDGG’‘逆序数为1(E>D)——近似排序,而序列’‘ZWQM’’ 逆序数为6(它是已排序序列(MQWZ)的反序,Z>W,Z>Q,Z>M,W>Q,W>M,Q>M)。所以逆序数越小,排序程度越高。

你的任务是分类DNA字符串(只有ACGT四种字符)。但是你分类它们的方法不是字典序,而是逆序数,排序程度从好到差。所有字符串长度相同。

Input:

输入包括多组数据,每组数据第一行为两个数:一个正整数n(0 Output:

对于每组数据,输出字符串列表,按排序程度从好到差。如果几个字符串逆序数相同,就按原来输入顺序输出。

Sample Input:

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

Sample Output:

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

#include 
#include 
#include "vector"

using namespace std;

class arr {
public:
    string m_str;
    //输出次序
    int m_id;
    //逆序数
    int m_value;
};



bool mCompare(const arr &a1, const arr &a2) {
    if (a1.m_value != a2.m_value)
        return a1.m_value < a2.m_value;
    else
        return a1.m_id < a2.m_id;
}



int main() {

    int n, m;

    while (cin >> n >> m) {

        //存储
        vector vector(m);
        for (int i = 0; i < m; ++i) {
            cin >> vector[i].m_str;
            vector[i].m_id = i + 1;
        }

        //算逆序数
        for (int i = 0; i < m; ++i) {
            int count = 0;
            for (int j = 0; j < vector[i].m_str.size() - 1; ++j) {
                for (int k = j + 1; k < vector[i].m_str.size(); ++k) {
                    if (vector[i].m_str[j] > vector[i].m_str[k])
                        count++;
                }
            }
            vector[i].m_value = count;
        }

        //排序
        sort(vector.begin(), vector.end(), mCompare);

        //输出
        for (auto & i : vector) {
            cout << i.m_str << endl;
        }
    }

    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768169.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号