解5道题得100分
解4道题,如果你在解四道题的人当中排在前面的一半得95分,否则90分
以此类推
模拟,注意只有一个人解4,3...道题的情况
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=105;
struct node
{
int num,time,pos,r,score;
}stu[maxn];
bool cmp1(const node &a,const node &b)
{
if(a.num!=b.num)return a.num>b.num;
else return a.time<b.time;
}
bool cmp2(const node &a,const node &b)
{
return a.pos<b.pos;
}
int main()
{
//freopen("in.txt","r",stdin);
int N;
int num,h,m,sec;
int Rank[6];
while(scanf("%d",&N)!=EOF&&N!=-1){
for(int i=0;i<N;i++){
scanf("%d %d:%d:%d",&num,&h,&m,&sec);
stu[i].num=num;
stu[i].time=h*3600+m*60+sec;
stu[i].pos=i;
}
sort(stu,stu+N,cmp1);
int s=1;num=stu[0].num;stu[0].r=1;
for(int i=1;i<N;i++){
if(num==stu[i].num){
s++;
stu[i].r=s;
if(i==N-1){
Rank[num]=s;
break;
}
}
else{
Rank[num]=s;
num=stu[i].num;
s=1;
stu[i].r=s;
if(i==N-1){
Rank[num]=s;
}
}
}
for(int i=0;i<N;i++){
if(stu[i].num==5)stu[i].score=100;
else if(stu[i].num==4){
if(stu[i].r<=Rank[4]/2||Rank[4]==1)stu[i].score=95;
else stu[i].score=90;
}
else if(stu[i].num==3){
if(stu[i].r<=Rank[3]/2||Rank[3]==1)stu[i].score=85;
else stu[i].score=80;
}
else if(stu[i].num==2){
if(stu[i].r<=Rank[2]/2||Rank[2]==1)stu[i].score=75;
else stu[i].score=70;
}
else if(stu[i].num==1){
if(stu[i].r<=Rank[1]/2||Rank[1]==1)stu[i].score=65;
else stu[i].score=60;
}
else stu[i].score=50;
}
sort(stu,stu+N,cmp2);
for(int i=0;i<N;i++){
printf("%d\n",stu[i].score);
}
printf("\n");
}
return 0;
}