hdu 1.3.3/hed 1084

hdu ACM STEPS 1.3.3

“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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<string>
#include<sstream>
#include<ctime>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
struct node {
    int solv,h,m,s,xuhao;
} student[104];
bool cmp(node a,node b) {
    if(a.solv!=b.solv) return a.solv>b.solv;
    else  {
        if(a.h!=b.h){return a.h<b.h;}
        else {
            if(a.m!=b.m){return a.m<b.m;}
            else {return a.s<b.s;}
        }
    }
}
int grade[103];
int nums[6],cnt[6];
int main() {
    ios::sync_with_stdio(false);
    int n;
    int solve,h,m,s;
    char ch;
    while(cin>>n&&(n!=-1)) {
            memset(nums,0,sizeof nums);
            memset(cnt,0,sizeof cnt);
        for(int i=0;i<n;i++){
            cin>>student[i].solv>>student[i].h>>ch>>student[i].m>>ch>>student[i].s;
            nums[student[i].solv]++;
            student[i].xuhao=i;
        }
        for(int i=0;i<6;i++){
            nums[i]/=2;
        }
        sort(student,student+n,cmp);
         /*for(int i=0;i<n;i++){
           cout<<student[i].solv<<" "<<student[i].h<<ch<<student[i].m<<ch<<student[i].s<<" "<<student[i].xuhao<<endl;
        }*/
        for(int i=0;i<n;i++){
            if(student[i].solv==5) solve=5,grade[student[i].xuhao]=100;
            else if(student[i].solv==0) grade[student[i].xuhao]=50;
            else{
                if(cnt[student[i].solv]<nums[student[i].solv]){
                        cnt[student[i].solv]++;
                if(student[i].solv==4) solve=4,grade[student[i].xuhao]=95;
                if(student[i].solv==3) solve=3,grade[student[i].xuhao]=85;
                if(student[i].solv==2) solve=2,grade[student[i].xuhao]=75;
                if(student[i].solv==1) solve=1,grade[student[i].xuhao]=65;
            }
            else{
                if(student[i].solv==4) grade[student[i].xuhao]=90;
                if(student[i].solv==3) grade[student[i].xuhao]=80;
                if(student[i].solv==2) grade[student[i].xuhao]=70;
                if(student[i].solv==1) grade[student[i].xuhao]=60;
            }
            }

        }
        for(int i=0;i<n;i++){
            cout<<grade[i]<<endl;
        }
        cout<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值