what is your grade?

“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**
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

Key point: people do on 1 to 4 title time from small to large, respectively, to the first half of the points 65,75,85,95 In addition, students need to record the location, restored to its original sequence to facilitate sorting.

Code:

```
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct node {
    int tm;
    int sum;
    int id;
    int same;//重复人数 
    int score;
};
bool cmp1(node x,node y){
    if(x.tm>y.tm) return 1;
    else if(x.tm==y.tm){
        if(x.sum<y.sum) return 1;
        return 0;
    }
    else return 0;
}
bool cmp2(node x,node y){
    if(x.id<y.id) return 1;
    else return 0;
}
int main(){
    int n;
    while(cin>>n&&n>=0){
        node a[n];
        int s1=0,s2=0,s3=0,s4=0;
        for(int i=0;i<n;i++){
            int x,y,z;//时分秒 
            scanf("%d %d:%d:%d",&a[i].tm,&x,&y,&z);
            if(a[i].tm==1) s1++;
            if(a[i].tm==2) s2++;
            if(a[i].tm==3) s3++;
            if(a[i].tm==4) s4++;
            a[i].sum=x*3600+y*60+z;
            a[i].id=i;
        }
        sort(a,a+n,cmp1);
        a[0].same=0; 
        for(int i=1;i<n;i++){
            if(a[i].tm==a[i-1].tm){
                a[i].same=a[i-1].same+1;
            }
            else a[i].same=0;
        } 
        for(int i=0;i<n;i++){
            switch(a[i].tm){
                case 1:if(a[i].same<s1/2) a[i].score=65;
                    else a[i].score=60;break;
                case 2:if(a[i].same<s2/2) a[i].score=75;
                    else a[i].score=70;break;
                case 3:if(a[i].same<s3/2) a[i].score=85;
                    else a[i].score=80;break;
                case 4:if(a[i].same<s4/2) a[i].score=95;
                    else a[i].score=90;break;
                case 5:a[i].score=100;break;
                default :a[i].score=50;
            }
        }
        sort(a,a+n,cmp2);
        for(int i=0;i<n;i++){
            cout<<a[i].score<<endl;
        }
        cout<<endl;
    }
    return 0;
}
```

 

Guess you like

Origin www.cnblogs.com/voids5/p/11209867.html