What Is Your Grade?

来源:互联网 发布:企业的域名 编辑:程序博客网 时间:2024/05/17 18:11
What Is Your Grade?(结构体+(sort))
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

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
 

输入时记录下输入顺序先按照做对体数排序再按照时间排序求出每个人应该得到的分数再按照输入顺序排序
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct node{    int s;    char t[20];    int sco;    int i;}a[111];bool cmp(node a,node b){    if(a.s!=b.s)        return a.s>b.s;    else         return strcmp(a.t,b.t)<0;}bool cmp1(node a,node b){    return a.i<b.i;}int N;int main(){    while(scanf("%d", &N) == 1 && N > 0){        int c[6]={0};        for(int i=0;i<N;i++){            scanf("%d %s",&a[i].s,a[i].t);            a[i].i=i;//记录出现次序            c[a[i].s]++;        }        sort(a,a+N,cmp);        for(int i=1;i<5;i++){            if(c[i]==1)                continue;            c[i]/=2;        }        for(int i=0;i<N;i++){            if(a[i].s==5)                a[i].sco=100;            else if(a[i].s==0)                a[i].sco=50;            else{                int k=1;                int l=a[i].s;                while(a[i].s==l&&i<N){                     if(k<=c[l])                        a[i].sco=100-(5-l)*10+5;                    else                        a[i].sco=100-(5-l)*10;                    k++;i++;                }                i--;            }        }//算出每个人应该得到的分数        sort(a,a+N,cmp1);        for(int i=0;i<N;i++)            printf("%d\n",a[i].sco);        printf("\n");    }    return 0;}



1 0