DNA Sorting(排序)
DNA SortingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2182 Accepted Submission(s): 1062 Problem Description
One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG'' has only one inversion (E and D)--it is nearly sorted--while the sequence ``ZWQM'' has 6 inversions (it is as unsorted as can be--exactly the reverse of sorted).
You are responsible for cataloguing a sequence of DNA strings (sequences containing only the four letters A, C, G, and T). However, you want to catalog them, not in alphabetical order, but rather in order of ``sortedness'', from ``most sorted'' to ``least sorted''. All the strings are of the same length. This problem contains multiple test cases! The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks. The output format consists of N output blocks. There is a blank line between output blocks. Input
The first line contains two integers: a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (1 < m <= 100) giving the number of strings. These are followed by m lines, each containing a string of length n.
Output
Output the list of input strings, arranged from ``most sorted'' to ``least sorted''. If two or more strings are equally sorted, list them in the same order they are in the input file.
Sample Input
1 10 6 AACATGAAGG TTTTGGCCAA TTTGGCCAAA GATCAGATTT CCCGGGGGGA ATCGATGCAT
Sample Output
CCCGGGGGGA AACATGAAGG GATCAGATTT ATCGATGCAT TTTTGGCCAA TTTGGCCAAA
|
思路:从小到大排列。。。不好说,看题;
代码:
1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 typedef struct{ 5 int num; 6 char str[51]; 7 }node; 8 int cmp(node a,node b){ 9 return a.num<b.num; 10 } 11 int search(int n,char *a){int flot=0; 12 for(int i=0;i<n;++i){ 13 for(int j=i+1;j<n;++j){ 14 if(a[j]-a[i]<0)flot++; 15 } 16 } 17 return flot; 18 } 19 int main(){ 20 int m,n,T; 21 node dna[110]; 22 scanf("%d",&T); 23 while(T--){scanf("%d%d",&n,&m); 24 int i=0; 25 for(int i=0;i<m;++i){ 26 scanf("%s",dna[i].str); 27 dna[i].num=search(n,dna[i].str); 28 } 29 sort(dna,dna+m,cmp); 30 for(int i=0;i<m;++i)printf("%s\n",dna[i].str); 31 } 32 return 0; 33 }
快排:
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; typedef struct{ int num; char str[51]; }node; node dna[110]; int search(int n,char *a){ int flot=0; for(int i=0;i<n;++i){ for(int j=i+1;j<n;++j){ if(a[j]-a[i]<0)flot++; } } return flot; } void Swap(node &a, node &b){ swap(a.num, b.num); char s[51]; strcpy(s, a.str); strcpy(a.str, b.str); strcpy(b.str, s); } int handle(int l, int r){ int j = l - 1; for(int i = l; i <= r; i++){ if(dna[i].num <= dna[r].num){ j++; Swap(dna[i], dna[j]); } } return j; } void quiksort(int l, int r){ int m; if(l < r){ m = handle(l, r); quiksort(l, m - 1); quiksort(m + 1, r); } } int main(){ int m,n,T; scanf("%d",&T); while(T--){scanf("%d%d",&n,&m); int i=0; for(int i=0;i<m;++i){ scanf("%s",dna[i].str); dna[i].num=search(n,dna[i].str); } quiksort(0, m - 1); for(int i=0;i<m;++i)printf("%s\n",dna[i].str); } return 0; }