HDUoj 1084 What Is Your Grade?( 贪心 水

本文介绍了一个考试评分系统的实现方法,该系统根据学生解答题目的数量及完成时间来分配分数,并通过不同的排序规则确保评分的公正性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

What Is Your Grade?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11242    Accepted Submission(s): 3517


Problem 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
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

 

Author
lcy

本来以为很烦人 结果发现很水

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{
    int m;  //题目数量
    char t[10]; //时间 
    int b;  //题目序号
    int s;  //成绩 
}p[105];
// 先按题目数量进行排序,题目数量相同按时间递增排序 
int cmp_1(node x, node y)
{
    if(x.m != y.m)
        return x.m > y.m;
return strcmp(x.t,y.t) < 0; 
}
int cmp_2(node x, node y)
{
    return x.b < y.b;
}
int main()
{
    int arr[10], brr[10];   //记录下相同题目解决的数量, 成绩 
    int n;
    while(~scanf("%d",&n),n+1){
        memset(arr,0,sizeof(arr));
        memset(brr,0,sizeof(brr));
        for(int i = 0;i < n; i++){
            scanf("%d %s",&p[i].m,p[i].t);
            p[i].b = i;
            arr[p[i].m]++;
        }
        sort(p, p+n, cmp_1);
        for(int i = 0;i < n; i++) {
            if(p[i].m == 0) {
                p[i].s = 50;
            }   
            if(p[i].m == 1) {
                brr[1]++;
                if(brr[1] <= arr[1]/2) p[i].s = 65;
                else p[i].s = 60;
            }
            if(p[i].m == 2) {
                brr[2]++;
                if(brr[2] <= arr[2]/2) p[i].s = 75;
                else p[i].s = 70;
            }
            if(p[i].m == 3) {
                brr[3]++;
                if(brr[3] <= arr[3]/2) p[i].s = 85;
                else p[i].s = 80;
            }
            if(p[i].m == 4) {
                brr[4]++;
                if(brr[4] <= arr[4]/2) p[i].s = 95;
                else p[i].s = 90;
            }
            if(p[i].m == 5) p[i].s = 100;
        }
        sort(p, p+n, cmp_2);
        for(int i = 0;i < n; i++)
            printf("%d\n",p[i].s);
            printf("\n"); 
    } 
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值