【12普及模拟】DNA排序

该博客讨论了如何根据DNA序列的逆序对数量(无序度)对其进行排序。给定长度为L的DNA序列,需要按照无序度递增的顺序输出,相同无序度则保持输入顺序。样例输入和输出展示了具体操作。算法解决方案涉及计算每个序列的无序度,然后使用快排进行排序,特别强调了在无序度相同情况下需保留输入顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
逆序对的定义如下:
有一个数列{an},对于任意的ai’<’aj若i’>’j,则称(ai,aj)为一个逆序对。
我们定义一个序列的无序度为其中的逆序对个数。
我们知道对于DNA,仅仅含有ACGT四种碱基,现在我们定义A’<’C’<’G’<’T,那么对于一串DNA序列,我们就可一得到它的无序度。
因此,我们给出n个长度均为L的DNA序列,请你将他们按无序度递增的顺序输出。对于无序度相同的两个DNA序列,输入顺序在前的序列输出也在前。
输入
第一行两个整数L和n。
接下来有n行,每一行有一个长度为L的字符串。
输出
n行,每行一个长度为L的字符串。
样例输入
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
样例输出
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA
数据范围
对于30%的数据n<=100。
对于另外30%的数据,序列的无序度各不相同。
对于100%的数据,n<=10000,L<=50。
算法讨论
感觉这题才应该放在第一题啊←_←,长度只有50,读入的时候就逐个比较求出无序度,最后一个快排就好了,注意无序度相同时要按输入顺序输出,也就是双关键字排序。

const
  maxn=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值