-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
给出一系列基因序列,由A,C,G,T四种字符组成。对于每一个序列,定义其逆序对如下:
序列中任意一对字符X和Y,若Y在X的右边(不一定相邻)且Y < X,则称X和Y为一个逆序对。
例如GAC这个序列,其中GC,GA都是逆序对。
一个序列的逆序对越多,则认为其"无序度"越高。你的任务是将基因按照无序度从小到大的顺序排序,如果存在无序度相同的序列,则按照原始输入顺序输出。
输入
-
首先是基因序列的长度n(0 < n <= 50)和基因序列的个数m ( 0 < m <= 100).
然后依次是这m个基因序列.
输出
- 输出排序后的m个基因序列。 样例输入
-
10 6 AACATGAAGG TTTTGGCCAA TTTGGCCAAA GATCAGATTT CCCGGGGGGA ATCGATGCAT
样例输出
-
CCCGGGGGGA AACATGAAGG GATCAGATTT ATCGATGCAT TTTTGGCCAA
TTTGGCCAAA
-
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct dna { char a[51]; int s; int i; }dna[101]; bool cmp(struct dna x,struct dna y) { if(x.s==y.s) return x.i<y.i; else return x.s<y.s; } int main() { int n,m,i,j,k; scanf("%d %d",&n,&m); for(i=0;i<m;i++) { dna[i].s=0; dna[i].i=i; scanf("%s",dna[i].a); for(j=0;j<n-1;j++) { for(k=j+1;k<n;k++) { if(dna[i].a[k]<dna[i].a[j]) dna[i].s++; } } } sort(dna,dna+m,cmp); for(i=0;i<m;i++) printf("%s\n",dna[i].a); return 0; }