| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
逆序数+基数排序#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <string.h>
char data[100][51];
uint16_t record[100][2];
uint16_t cal[1251];
char res[101];
int main()
{
int n, m;
int i,j,k;
int a, g, c, t, inverse;
int max = 0;
scanf("%d%d", &m, &n);
for(i = 0; i < n; i++)
{
scanf("%s", data[i]);
a = 0;
c = 0;
g = 0;
t = 0;
inverse = 0;
for(j = m - 1; j >= 0; j--)
{
if (data[i][j] == 'A')
{
a++;
}
else if (data[i][j] == 'C')
{
c++;
inverse = inverse + a;
}
else if (data[i][j] == 'G')
{
g++;
inverse = inverse + a + c;
}
else if (data[i][j] == 'T')
{
t++;
inverse = inverse + a + c + g;
}
}
record[i][0] = inverse;
record[i][1] = i;
if (inverse > max)
max = inverse;
}
memset(cal, 0, 1251);
for(i = 0; i < n; i++)
cal[record[i][0]]++;
for (i = 1; i <= max; i++)
cal[i] += cal[i - 1];
for (i = n - 1; i >= 0; i--)
{
res[cal[record[i][0]]] = record[i][1];
cal[record[i][0]]--;
}
for (i = 0; i < n; i++)
printf("%s\n", data[record[res[i+1]][1]]);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator