您的位置:首页 > 其它

1007:DNA排序

2017-09-06 15:47 946 查看

1007:DNA排序

总时间限制: 1000ms 内存限制: 65536kB
描述
现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且 A[i] > A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。

输入
第1行:两个整数n和m,n(0<n<=50)表示字符串长度,m(0<m<=100)表示字符串数量

第2至m+1行:每行是一个长度为n的字符串
输出
按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的顺序输出。
样例输入
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
样例输出
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA


#include <iostream>
#include<algorithm>
using namespace std;
//http://bailian.openjudge.cn/practice/1007/
//循环里面的变量又写错了一次
struct str{
char a[55];
int cnt;
};
int n,m;
str s[110];
bool cmp(str x,str y){
return x.cnt<y.cnt;
}
int main(int argc, char *argv[]) {
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>s[i].a;
s[i].cnt=0;
for(int j=0;j<n-1;j++){
for(int k=j+1;k<n;k++){
if(s[i].a[j]>s[i].a[k]){
s[i].cnt++;
}
}
}
//cout<<s[i].cnt<<endl;
}
sort(s,s+m,cmp);
for(int i=0;i<m;i++)
cout<<s[i].a<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj