排序题,对字符串的“逆序数”排序。这里采用计数排序,一来速度快,二来计数排序是稳定的刚好符合题意。
Accepted | 1188 | C | 00:00.00 | 396K |
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
struct st
{
int measure;
char* str;
}dna[100],dna2[101 ];
void solve(int n,int m)
{
int i,j,k,cnt[1300] = {0},max = 0,min = 0xffff ;
for (i = 0; i < m; i++ )
{
dna[i].str = (char*)malloc(sizeof(char) * (n + 1 ));
scanf("%s" ,dna[i].str);
dna[i].measure = 0 ;
}
for (i = 0; i < m; i++ )
for (j = 0; j < n; j++ )
for (k = j + 1; k < n; k++ )
if (dna[i].str[j] > dna[i].str[k])
{
dna[i].measure++ ;
if (max < dna[i].measure) max = dna[i].measure;
}
for (i = 0; i < m; i++ )
if (min > dna[i].measure) min = dna[i].measure;
for (j = 0; j < m; j++ )
cnt[dna[j].measure]++ ;
for (i = min + 1; i <= max; i++ )
cnt[i] += cnt[i - 1 ];
for (j = m - 1; j >= 0; j-- )
{
dna2[cnt[dna[j].measure]].measure = dna[j].measure;
dna2[cnt[dna[j].measure]].str = dna[j].str;
cnt[dna[j].measure]-- ;
}
for (i = 1; i <= m; i++ )
{
puts(dna2[i].str);
free(dna2[i].str);
}
}
void main()
{
#ifndef ONLINE_JUDGE
freopen("1188.txt","r" ,stdin);
#endif
int N,i,n,m;
scanf("%d",& N);
for (i = 0; i < N; i++ )
{
if (i > 0) printf("/n" );
scanf("%d%d",&n,& m);
solve(n,m);
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
}
#include <string.h>
#include <stdlib.h>
struct st
{
int measure;
char* str;
}dna[100],dna2[101 ];
void solve(int n,int m)
{
int i,j,k,cnt[1300] = {0},max = 0,min = 0xffff ;
for (i = 0; i < m; i++ )
{
dna[i].str = (char*)malloc(sizeof(char) * (n + 1 ));
scanf("%s" ,dna[i].str);
dna[i].measure = 0 ;
}
for (i = 0; i < m; i++ )
for (j = 0; j < n; j++ )
for (k = j + 1; k < n; k++ )
if (dna[i].str[j] > dna[i].str[k])
{
dna[i].measure++ ;
if (max < dna[i].measure) max = dna[i].measure;
}
for (i = 0; i < m; i++ )
if (min > dna[i].measure) min = dna[i].measure;
for (j = 0; j < m; j++ )
cnt[dna[j].measure]++ ;
for (i = min + 1; i <= max; i++ )
cnt[i] += cnt[i - 1 ];
for (j = m - 1; j >= 0; j-- )
{
dna2[cnt[dna[j].measure]].measure = dna[j].measure;
dna2[cnt[dna[j].measure]].str = dna[j].str;
cnt[dna[j].measure]-- ;
}
for (i = 1; i <= m; i++ )
{
puts(dna2[i].str);
free(dna2[i].str);
}
}
void main()
{
#ifndef ONLINE_JUDGE
freopen("1188.txt","r" ,stdin);
#endif
int N,i,n,m;
scanf("%d",& N);
for (i = 0; i < N; i++ )
{
if (i > 0) printf("/n" );
scanf("%d%d",&n,& m);
solve(n,m);
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
}