引用
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 44479 | Accepted: 17334 |
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.
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.
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 (0 < 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''. Since two strings can be equally sorted, then output them according to the orginal order.
Sample Input
10 6 AACATGAAGG TTTTGGCCAA TTTGGCCAAA GATCAGATTT CCCGGGGGGA ATCGATGCAT
Sample Output
CCCGGGGGGA AACATGAAGG GATCAGATTT ATCGATGCAT TTTTGGCCAA TTTGGCCAAA
分析:
1. 输入m,n. 按m,n限定后续的string的长度及个数.
2. 我这里这组string用结构体链表连接.string使用char*然后动态分配内存空间malloc()
3. 先计算string需要排序的次数(unsortedness到sortedness)存到qty,然后按qty排序链表
我的代码:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
struct DNA
{
char* sequence;
int sortqty;
struct DNA* next;
};
int main()
{
int n;
int m;
char In;
int cpy_m;
struct DNA unsortedness;
struct DNA* tail;
tail=&unsortedness;
tail->next=NULL;
cout<<"length of the strings n(0<n<=50) and number of strings m(0<m<=100):"<<endl;
while(1)
{
cin>>n>>m;
if(n>0 && n<=50 && m>0 && m<=100)
{
break;
}
cout<<"wrong!/n/"n/" (0 < n <= 50) /"m/" (0 < m <= 100):"<<endl;
cin.clear();
}
system("CLS");
cout<<"length of the strings n(0<n<=50) and number of strings m(0<m<=100):/n"
<<n<<" "<<m<<endl;
cpy_m=m;
while(m)
{
tail->next=new DNA;
tail=tail->next;
tail->next=NULL;
tail->sequence=(char*)malloc(n+1);
for(int i=0;i<n;)
{
cin>>In;
if(In=='A'|| In=='C' || In=='T' || In=='G')
{
*(tail->sequence+i)=In;
i++;
}
else
cout<<"Input wrong!"<<endl;
}
*(tail->sequence+n+1)='/0';
m--;
}
tail=unsortedness.next;
//sorting DNA sequence
while(tail)
{
tail->sortqty=0;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(*(tail->sequence+i)>*(tail->sequence+j))
tail->sortqty++;
}
}
tail=tail->next;
}
cout<<"/n"<<endl;
tail=unsortedness.next;
//排序
struct DNA* nt;
for(int i=0;i<cpy_m-1;i++)
{
tail=unsortedness.next;
while(tail->next)
{
nt=tail->next;
if(tail->sortqty>nt->sortqty)
{
int tqty;
char* tsq;
tqty=tail->sortqty;
tsq=tail->sequence;
tail->sortqty=nt->sortqty;
tail->sequence=nt->sequence;
nt->sortqty=tqty;
nt->sequence=tsq;
}
tail=tail->next;
}
}
//输出
tail=unsortedness.next;
while(tail)
{
cout<<tail->sequence<<endl;
tail=tail->next;
}
_getch();
return 0;
}