AC代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
typedef struct{
int pre_num;
int score;
int time;
int cnt;
}Student;
int cmp1( const void* a, const void* b ){
Student* c = (Student*)a;
Student* d = (Student*)b;
if( c->cnt == d->cnt ){
return c->time - d->time;
}else{
return d->cnt - c->cnt;
}
}
int cmp2( const void* a, const void* b ){
Student* c = (Student*)a;
Student* d = (Student*)b;
return c->pre_num - d->pre_num;
}
int main(){
int N;
Student std[101];
int tot[6];
int sum[6];
while( cin >> N && N != -1 ){
memset( tot, 0, sizeof( tot ) );
memset( sum, 0, sizeof( sum ) );
for( int i = 0; i < N; i++ ){
int h, m, s;
cin >> std[i].cnt;
scanf( "%d:%d:%d", &h, &m, &s );
std[i].pre_num = i;
std[i].time = h * 3600 + m * 60 + s;
sum[std[i].cnt]++;
}
qsort( std, N, sizeof( std[0] ), cmp1 );
for( int i = 4; i > 0; i-- ){
tot[i] = tot[i+1];
tot[i] += sum[i+1];
}
for( int i = 0; i < N; i++ ){
std[i].score = std[i].cnt * 10 + 50;
if( std[i].cnt < 5 && std[i].cnt > 0 ){
if( ( i + 1 - tot[std[i].cnt] ) <= ( sum[std[i].cnt] / 2 ) ){
std[i].score += 5;
}
}
}
qsort( std, N, sizeof( std[0] ), cmp2 );
for( int i = 0; i < N ; i++ ){
cout << std[i].score << endl;
}
cout << endl;
}
return 0;
}