• 5.E


    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<math.h>
    using namespace std;
    typedef long long ll;
    using namespace std;
    int b[110],p[7];
    struct NODE
    {
        int num,h,m,s,r,t;
    }a[110];
    bool cmp(int x,int y)
    {
        if(a[x].num!= a[y].num) return a[x].num>a[y].num;
        return a[x].t< a[y].t;
    }
    int main()
    {
        int i,j,n;
        while(cin>>n && n+1)
        {
            memset(p,0,sizeof(p));
            p[6]=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d %d:%d:%d",&a[i].num,&a[i].h,&a[i].m,&a[i].s);
                a[i].t = 3600*a[i].h + 60*a[i].m+a[i].s;
                b[i]=i;
                p[a[i].num]++;//题数的人数
            }
            sort(b+1,b+n+1,cmp);
            for(i=4;i>=0;i--)
                p[i]+=p[i+1];//  题数的人数要加上前面的
            for(i=1;i<=n;i++)
                a[b[i]].r=i;    //排名
            for(i=1;i<=n;i++)
            {
                int t= a[i].r - p[a[i].num+1] , s =0;//排名等于总排名 - (题数+1)的人数
                if( (t<= (p[a[i].num]-p[a[i].num+1] )/2|| p[a[i].num]==1 )&& a[i].num  && a[i].num!=5 ) 
                    s=5;// 
                cout<<100-(5-a[i].num)*10+s<<endl;
            }
            cout<<endl;
        }
    }

    题目连接 http://acm.hust.edu.cn/vjudge/contest/126708#problem/E

    题目思路, 根据做题个数和时间排出一个总排名(开始时间没有想到化为一个整的时间,小时和小时比,分钟和分钟比。。有点小麻烦),  有一个数组p[i]记录做出了i道题的人数, 

    注意做出了5道题的也做出了四道题。所以 排名等于总排名 - (题数+1)的人数。

  • 相关阅读:
    如何处理消息堆积
    如何避免消息的重复发送
    内存泄漏和内存溢出的关系
    数据挖掘
    servlet
    数据驱动安全需三大核心新技术
    JS 入门经典 第三章 判断、循环和函数
    JS 高级程序设计 第三章
    JS入门经典
    JS高级程序设计1-2章
  • 原文地址:https://www.cnblogs.com/Twsc/p/5762566.html
Copyright © 2020-2023  润新知