HDU1084 What Is Your Grade?

题目链接:HDU1084

What Is Your Grade?

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


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
 

题意:模拟acm比赛过程,5题的100分,4题90分,依次递减,对做出一题到4题的队伍如果时间排名在作出同样题数的队伍中一半以前的话就加5分,最后输出每个队伍都多少分。

题目分析:水题,坑点在于题意,以及输出格式。cmp1代表按题数和时间排序,cmp2代表变回原来的输入序列。


//
//  main.cpp
//  HDU1084
//
//  Created by teddywang on 16/4/18.
//  Copyright © 2016年 teddywang. All rights reserved.
//

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node {
    int num;
    int p,s;
    int score;
};
bool cmp1(node a,node b)
{
    if(a.num!=b.num) return a.num<b.num;
    else return a.s<b.s;
}

bool cmp2(node a,node b)
{
    return a.p<b.p;
}

int main()
{
    int n;
    while(cin>>n&&n>=0)
    {
        if(n<0) break;
        node t[105];
        int h,m;
        int b5=0,b4=0,b3=0,b2=0,b1=0,b0=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d:%d:%d",&t[i].num,&h,&m,&t[i].s);
            t[i].s+=60*m;
            t[i].s+=3600*h;
            t[i].p=i;
            if(t[i].num==5) {
                t[i].score=100;
                b5++;
            }
            else if(t[i].num==4) {
                t[i].score=90;
                b4++;
            }
            else if(t[i].num==3) {
                t[i].score=80;
                b3++;
            }
            else if(t[i].num==2) {
                t[i].score=70;
                b2++;
            }
            else if(t[i].num==1) {
                t[i].score=60;
                b1++;
            }
            else if(t[i].num==0) {
                t[i].score=50;
                b0++;
            }
        }
        sort(t+1,t+n+1,cmp1);
        for(int i=1;i<=(b1)/2;i++)
            t[b0+i].score+=5;
        for(int i=1;i<=(b2)/2;i++)
            t[b0+b1+i].score+=5;
        for(int i=1;i<=(b3)/2;i++)
            t[b0+b1+b2+i].score+=5;
        for(int i=1;i<=(b4)/2;i++)
            t[b0+b1+b2+b3+i].score+=5;
        sort(t+1,t+n+1,cmp2);
        for(int i=1;i<=n;i++)
            cout<<t[i].score<<endl;
        cout<<endl;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值