hdoj 1084 What Is Your Grade?

来源:互联网 发布:云数据库的特点是什么 编辑:程序博客网 时间:2024/06/05 07:22

What Is Your Grade?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9242    Accepted Submission(s): 2835


Problem 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<p.
A test case starting with a negative integer terminates the input and this test case should not to be processed.

Output
Output the scores of N students in N lines for each case, and there is a blank line after each case.

Sample Input
45 06:30:174 07:31:274 08:12:124 05:23:1315 06:30:17-1

Sample Output
100909095100
不认真读题 就是要付出WA的代价。。。
 
 
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;struct record{    int solve,time,order,score;//order记录该生出现的先后顺序 }num[110];bool cmp1(record a,record b){    return a.order<b.order;}bool cmp2(record a,record b){    if(a.solve!=b.solve)    return a.solve>b.solve;    else    return a.time<b.time;}int main(){    int n,i,j,k;    int a,b,c;    int p4,p3,p2,p1;    int sum1,sum2,sum3,sum4;     while(scanf("%d",&n)!=EOF)    {        if(n<0)        break;        sum1=sum2=sum3=sum4=0;        for(i=0;i<n;i++)        {            scanf("%d%d:%d:%d",&num[i].solve,&a,&b,&c);            if(num[i].solve==1)            sum1++;            else if(num[i].solve==2)            sum2++;            else if(num[i].solve==3)            sum3++;            else if(num[i].solve==4)            sum4++;             num[i].time=a*3600+b*60+c;            num[i].order=i;        }        sort(num,num+n,cmp2);//按排名排序         p4=p3=p2=p1=0;//记录解决同样数目问题的学生 已出现多少个         for(i=0;i<n;i++)        {            if(num[i].solve==5)            num[i].score=100;            else if(num[i].solve==0)            num[i].score=50;            else             {                if(num[i].solve==4)                {                    if(p4<sum4/2)                    {                        num[i].score=95;                        p4++;                    }                    else                    {                        num[i].score=90;                    }                }                else if(num[i].solve==3)                {                    if(p3<sum3/2)                    {                        num[i].score=85;                        p3++;                    }                    else                    {                        num[i].score=80;                    }                }                else if(num[i].solve==2)                {                    if(p2<sum2/2)                    {                        num[i].score=75;                        p2++;                    }                    else                    {                        num[i].score=70;                    }                }                else                {                    if(p1<sum1/2)                    {                        num[i].score=65;                        p1++;                    }                    else                    {                        num[i].score=60;                    }                }            }        }        sort(num,num+n,cmp1);//回到以前的序列         for(i=0;i<n;i++)        printf("%d\n",num[i].score);        printf("\n");    }    return 0;}

 

0 0
原创粉丝点击