Description
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
就是 找出每个字母往后比他小的个数然后求和,从小到大排列
分析:
就是一个一个的往后找
代码:
#include<bits/stdc++.h>
using namespace std;
int Vp(string a,int n)
{
int i,j,s=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++){
if(a[i]>a[j])
s++;
}
return s;
}
int main()
{
string a[105];
int n,m,t,i,p,s=0,r;
multimap<int,int>v;
multimap<int,int>::iterator it;
while(cin>>t)
{
s=0;
r=0;
while(cin>>n>>m&&r<t)
{
if(s)
cout<<endl;
else
s=1;
r++;
for(i=0;i<m;i++){
cin>>a[i];
p=Vp(a[i],n);
v.insert(make_pair(p,i));
}
for(it=v.begin();it!=v.end();it++)
cout<<a[(*it).second]<<endl;
v.clear();
}
}
}
感受:
就是英文不好看。。。英语内伤啊