hduoj1084!【水题】

来源:互联网 发布:机房网络布线方案 编辑:程序博客网 时间:2024/05/19 14:38
/*What Is Your Grade?Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8551    Accepted Submission(s): 2629Problem 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!InputInput 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.OutputOutput the scores of N students in N lines for each case, and there is a blank line after each case.Sample Input45 06:30:174 07:31:274 08:12:124 05:23:1315 06:30:17-1 Sample Output100909095100Authorlcy*/#include<stdio.h>#include<stdlib.h>struct students{int num;int time;int score;int num2;}stu[110];int cmp(const void *a , const void *b)//按照做题数从大到小,若相等则按时间数从小到大 {struct students *c = (struct students *)a;struct students *d = (struct students *)b;if((*(struct students *)c).num != (*(struct students *)d).num)return (*(struct students *)d).num - (*(struct students *)c).num;elsereturn (*(struct students *)c).time - (*(struct students *)d).time;}int cmp1(const void*a, const void *b)//返回原序列 {return  (*(struct students *)a).num2 - (*(struct students*)b).num2;}int main(){int n, i, j, k, l;while(scanf("%d", &n) != EOF){if(n == -1)break;for(i = 0; i < n; i++){scanf("%d%d:%d:%d", &stu[i].num, &j, &k, &l);stu[i].time = j * 3600 + k * 60 + l;stu[i].num2 = i+1;}qsort(stu, n, sizeof(stu[0]), cmp);for(i = 0; i < n; i++){if(stu[i].num == 5)stu[i].score = 100;else if(stu[i].num == 4)stu[i].score = 90;else if(stu[i].num == 3)stu[i].score = 80;else if(stu[i].num == 2)stu[i].score = 70;else if(stu[i].num == 1)stu[i].score = 60;else stu[i].score = 50;}for(i = 0; i < n; i++)if(stu[i].score == 90){for(j = i; j <= n; j++)if(stu[j].score != 90){for(k = i; k < i  + (j-i)/2; k++)stu[k].score = 95;break;}break;}for(i = 0; i < n; i++)if(stu[i].score == 80){for(j = i; j <= n; j++)if(stu[j].score != 80){for(k = i; k < i + (j-i)/2; k++)stu[k].score = 85;break;}break;}for(i = 0; i < n; i++)if(stu[i].score == 70){for(j = i; j <= n; j++)if(stu[j].score != 70){for(k = i; k < i + (j-i)/2; k++)stu[k].score = 75;break;}break;}for(i = 0; i < n; i++)if(stu[i].score == 60){for(j = i; j <= n; j++)if(stu[j].score != 60){for(k = i; k < i + (j-i)/2; k++)stu[k].score = 65;break;}break;}qsort(stu, n, sizeof(stu[0]), cmp1);for(i = 0 ; i < n; i++)printf("%d\n", stu[i].score);printf("\n");}return 0;}


没什么特别的,就是结构体的排序。

唯一注意的是此题在杭电上,做题数只有一个人的时候,x0和x5都是对的。

0 0
原创粉丝点击