HDU 1804——What Is Your Grade?
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!
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.
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
题目大意:意思大概是给学生打分数,做出的时间越短,题目越多,分数越高。
解决办法:题目不是很难,只要读懂题目,能对时间等数据进行妥善处理,就可以解决了
接下来是代码:
1 #include<algorithm> 2 #include<cstdlib> 3 #include<iostream> 4 #include<cstring> 5 using namespace std; 6 7 struct Node 8 { 9 int num; 10 int n;//题目 11 int fen;//分数 12 int time;//时间 13 }node[110]; 14 15 int cmp1(const void *a,const void *b) 16 { 17 struct Node *c=(Node *)a; 18 struct Node *d=(Node *)b; 19 if(c->n == d->n)return c->time - d->time; 20 return d->n - c->n; 21 } 22 23 int cmp2(const void *a,const void *b) 24 { 25 struct Node *c=(Node *)a; 26 struct Node *d=(Node *)b; 27 return c->num - d->num; 28 } 29 30 int main() 31 { 32 int n,i,j,k; 33 int sum[10]; 34 int tol[10]; 35 int h,m,s; 36 while(scanf("%d",&n)) 37 { 38 if(n<0)break; 39 memset(sum,0,sizeof(sum)); 40 memset(tol,0,sizeof(tol)); 41 for(i=0;i<n;i++) 42 { 43 scanf("%d %d:%d:%d",&node[i].n,&h,&m,&s); 44 node[i].num=i; 45 node[i].time=h*3600+m*60+s; 46 sum[node[i].n]++; 47 } 48 for(i=4;i>0;i--) 49 { 50 tol[i]=tol[i+1]; 51 tol[i]+=sum[i+1]; 52 } 53 qsort(node,n,sizeof(node[0]),cmp1);//qsort对时间排序更为有效 54 for(i=0;i<n;i++) 55 { 56 node[i].fen=node[i].n*10+50; 57 if(node[i].n>=1&&node[i].n<5&&(((i+1)-tol[node[i].n])<=sum[node[i].n]/2)) 58 node[i].fen+=5; 59 } 60 qsort(node,n,sizeof(node[0]),cmp2); 61 for(i=0;i<n;i++) 62 { 63 printf("%d\n",node[i].fen); 64 } 65 printf("\n"); 66 } 67 return 0; 68 69 }