计蒜客T1246 DNA排序

博客探讨了如何对含有ACGT字符的DNA串按逆序对数量进行排序的问题,详细解释了逆序对的定义,并给出了样例输入和输出。博主分享了编程思路,提到了初始化计数变量的重要性以及在处理这类问题时的经验教训。
摘要由CSDN通过智能技术生成

现在有一些长度相等的 DNA 串(只由 ACGT 四个字母组成),请将它们按照逆序对的数量多少排序。

逆序对指的是字符串A中的两个字符 A[i]、A[j],具有 i < j 且 A[i] > A[j] 的性质。如字符串 “ATCG” 中,T 和 C 是一个逆序对,T 和 G 是另一个逆序对,这个字符串的逆序对数为 22。

输入格式
第 11 行:两个整数 nn 和 mm,n(0<n≤50) 表示字符串长度,m(0<m≤100) 表示字符串数量;

第 22 至 m+1 行:每行是一个长度为 n 的字符串。

输出格式
按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的顺序输出。

输出时每行末尾的多余空格,不影响答案正确性

样例输入
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
样例输出
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

思路就是:字符串逐个字符向后搜索,如果发现在它前面的对数就加1,就是循环有点多,容易乱,自己理清楚就好。这道题真的感觉很头痛,然后大佬发现是cnt没有初始化的问题(运行结果是随机数),已经好几次没有初始化犯错了┭┮﹏┭┮,以后一定记着初始化。

#include<iostream>
#include<algorithm>
using namespace std;
struct node{
   
	int num;//输入编号 
	int cnt;//逆序对的对数 
	string s;//存储字符串 
};
bool cmp(node a,node b){
   
	if(a.cnt==b.cnt)
	return a.num<b.num;
	else
	return a.cnt<b.cnt; 
}

int main(){
   
	int m,n,i;
	cin>>n>>m;
	struct node a[m];
	for(i=0;i<m;i++){
       
		cin>>a[i].s;
		a[i].cnt=0;//*初始化*
		a[i].num=i+1;
	}

	for(i=0;i<m;i+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值