标签:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,m;
struct e
{
char a[200];
int id;
int px;
}s[200];
int cmp(e s1,e s2)
{
if(s1.px==s2.px) return s1.id<s2.id;
else return s1.px<s2.px;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<m;i++)
{ int sum=0;
s[i].id=i;
scanf("%s",s[i].a);
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])sum++;
s[i].px=sum;
}
sort(s,s+m,cmp);
for(int i=0;i<m;i++)
printf("%s\n",s[i].a);
}
}
但是这种方法获得sum效率不是很高
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,m;
struct e
{
char a[200];
int id;
int px;
}s[200];
int cmp(e s1,e s2)
{
if(s1.px==s2.px) return s1.id<s2.id;
else return s1.px<s2.px;
}
int get(char a[])
{
int ans = 0;
int A, C, G;
A = C = G = 0;
for(int i = n - 1; i >= 0; i--)
{
switch (a[i]) {
case 'A':
A++;
break;
case 'C':
C++;
ans += A;
break;
case 'G':
G++;
ans += A;
ans += C;
break;
case 'T':
ans += A;
ans += C;
ans += G;
}
}
return ans;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<m;i++)
{ int sum=0;
s[i].id=i;
scanf("%s",s[i].a);
s[i].px=get(s[i].a);
}
sort(s,s+m,cmp);
for(int i=0;i<m;i++)
printf("%s\n",s[i].a);
}
}
时间复杂度更低
标签:
原文地址:http://blog.csdn.net/hy1405430407/article/details/45032755