默默的说真的是水题
题目大意:
输入:
第一行包含两个数:一个正整数n(0<n<=50)表示字符串长度,一个正整数m(0<m<=100)表示字符串个数。接下来m行,每行一个长度为n的字符串。
输出:
输出输入字符串列表,按排序程度从好到差。如果逆序数相同,就原来顺序输出。
解题:从后往前记录大于该字符的值的个数
因为只有ACGT所以不用开数组的
只记录ACG的原因是没有比T更大的了 不用记录大于T的个数了
之后在结构体中记录下字符串(我是记录的输入顺序) 自定义一个<号即可sort排序
直接上代码
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
struct S{int nu,cnt;}s[110];
char q[110][60];
int ans,n,c,A,C,G;
bool operator <(S a,S b){return a.cnt>b.cnt;}
int main()
{
scanf("%d%d",&c,&n);
for(int k=1;k<=n;k++)
{
A=0;C=0;G=0;
ans=0;
scanf("%s",&q[k]);
for(int i=c-1;i>=0;i--)
{
if(q[k][i]=='A')A++;
if(q[k][i]=='T'){ans+=A;ans+=C;ans+=G;}
if(q[k][i]=='G'){G++;ans+=A;ans+=C;}
if(q[k][i]=='C'){C++;ans+=A;}
}
s[k].cnt=ans;
s[k].nu=k;
}
sort(s+1,s+n+1);
for(int i=n;i>=1;i--)
{
printf("%s\n",q[s[i].nu]);
}
return 0;
}