F

来源:互联网 发布:淘宝代码怎么用的 编辑:程序博客网 时间:2024/05/16 15:51

F - 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
45 06:30:174 07:31:274 08:12:124 05:23:1315 06:30:17-1
Sample Output
100909095100
#include<cstdio>  #include<cstring>  #include<algorithm>  using namespace std;  struct stu  {      int n;      char time[10];      int turn;      int k;      int p;    } data[120];   bool cmp1(stu A,stu B)   {      if(A.n==B.n)      {          return strcmp(A.time,B.time)<0;      }                           return A.n>B.n;   }   bool cmp2(stu A,stu B)   {      return A.turn<B.turn;   }   int main()   {      int N,i,k[100+25],a,b,c,d,j,m;      while(scanf("%d",&N))      {          if(N==-1)        break;        a=1,b=1,c=1,d=1,j=-1;          for(i=0;i<N;i++)          {              scanf("%d %s",&data[i].n,data[i].time);              data[i].turn=i;          }          sort(data,data+N,cmp1);          for(i=0;i<N;i++)          {              if(data[i].n==5)              {                  data[i].k=100;                  j=i;              }              else if(data[i].n==data[i+1].n&&data[i].n==4)                  a++;              else if(data[i].n==data[i+1].n&&data[i].n==3)                  b++;              else if(data[i].n==data[i+1].n&&data[i].n==2)                  c++;              else if(data[i].n==data[i+1].n&&data[i].n==1)                  d++;              else                  data[i].k=50;          }          m=j+1;          for(i=m;i<m+a/2;i++)              data[i].k=95;          for(i=m+a/2;i<m+a;i++)              data[i].k=90;          for(i=m+a;i<m+a+b/2;i++)              data[i].k=85;          for(i=m+a+b/2;i<m+a+b;i++)              data[i].k=80;          for(i=m+a+b;i<m+a+b+c/2;i++)              data[i].k=75;          for(i=m+a+b+c/2;i<m+a+b+c;i++)              data[i].k=70;          for(i=m+a+b+c;i<m+a+b+c+d/2;i++)              data[i].k=65;          for(i=m+a+b+c+d/2;i<m+a+b+c+d;i++)              data[i].k=60;          for(i=0;i<N;i++)              data[i].p=data[i].k;           sort(data,data+N,cmp2);           for(i=0;i<N;i++)              printf("%d\n",data[i].p);          printf("\n");       }       return 0;   }