Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 65 Solved: 4
[Submit][Status][Web Board]
Description
“Point, point, life of student!” This is a ballad(歌谣)well known in colleges, and you must care about your score in this exam too. How many points can you get? Now, I told you the rules which are used in this course. There are 5 problems in this final exam. And I will give you 100 points if you can solve all 5 problems; of course, it is fairly difficulty for many of you. If you can solve 4 problems, you can also get a high score 95 or 90 (you can get the former(前者) only when your rank is in the first half of all students who solve 4 problems). Analogically(以此类推), you can get 85、80、75、70、65、60. But you will not pass this exam if you solve nothing problem, and I will mark your score with 50. Note, only 1 student will get the score 95 when 3 students have solved 4 problems. I wish you all can pass the exam! Come on!
Input
Input contains multiple test cases. Each test case contains an integer N (1<=N<=100, the number of students) in a line first, and then N lines follow. Each line contains P (0<=P<=5 number of problems that have been solved) and T(consumed time). You can assume that all data are different when 0
Output
Output the scores of N students in N lines for each case, and there is a blank line after each case.
Sample Input
4
5 06:30:17
4 07:31:27
4 08:12:12
4 05:23:13
1
5 06:30:17
-1
Sample Output
100
90
90
95
100
标程:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct gong{
int n;
int time;
int socres;
int code;
int m;
};
int compare(const void *a,const void *b)
{
struct gong *aa = (gong *)a;
struct gong *bb = (gong *) b;
if(aa->n!=bb->n) return bb->n - aa->n;
else return aa->time - bb->time;
}
int recompare(const void *a,const void *b)
{
struct gong *aa = (gong *) a;
struct gong *bb = (gong *) b;
return aa->code - bb->code;
}
int main()
{
int test;
while(cin>>test)
{
if(test<0) break;
gong obj[102];
for(int i=0;i<test;i++)
{
int n;
cin>>n;
int a,b,c;
scanf("%d:%d:%d",&a,&b,&c);
a = a*3600+b*60+c;
obj[i].code=i;obj[i].n=n;
obj[i].time=a;
}
qsort(obj,test,sizeof(obj[0]),compare);
obj[0].m=1;
int a4=0,a3=0,a2=0,a1=0;
for(int i=0;i<test;i++)
{
if(i!=0)
{
if(obj[i].n!=obj[i-1].n)obj[i].m=1;
else obj[i].m=obj[i-1].m+1;
}
switch(obj[i].n)
{
case 4:a4++;break;
case 3:a3++;break;
case 2:a2++;break;
case 1:a1++;break;
default:;
}
}
for(int i=0;i<test;i++)
{
switch(obj[i].n)
{
case 5:obj[i].socres=100;break;
case 4:if(obj[i].m<=a4/2||a4==1) obj[i].socres=95;
else obj[i].socres=90;break;
case 3:if(obj[i].m<=a3/2||a3==1) obj[i].socres=85;
else obj[i].socres=80;break;
case 2:if(obj[i].m<=a2/2||a2==1) obj[i].socres=75;
else obj[i].socres=70;break;
case 1:if(obj[i].m<=a1/2||a1==1) obj[i].socres=65;
else obj[i].socres=60;break;
case 0:obj[i].socres=50;
}
}
qsort(obj,test,sizeof(obj[0]),recompare);
for(int i=0;i<test;i++)
cout<<obj[i].socres<<endl;
cout << endl;
}
return 0;
}