Blog·Tanky WooABOUTRSS

HDU/HDOJ 1084 What Is Your Grade?

27 Apr 2011
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1084

水题,就是用sort或qsort比较。

不过这里有一点要注意,在比较时间时,可以统一转换成按s来比较。

AC代码,写的很水很烂,自己都觉得晕了。。。

#include 
#include 
using namespace std;

typedef struct time{
    int h, m, s;
    int tot;
}time;

typedef struct stu{
    int p;
    time t;
    int id;
    int sco;
}stu;

stu ss[105], ss2[105];
int n;

bool cmp (stu e1, stu e2 )
{
    if(e1.p != e2.p)
        return e1.p > e2.p;
    else
        return e1.t.tot < e2.t.tot;
}

bool cmp2(stu e1, stu e2)
{
    return e1.id < e2.id;
}

int main()
{
    //freopen("input.txt", "r", stdin);
    //bool flag = 0;

    while(cin >> n && n != -1)
    {
        //if(flag == 1)
        //    cout << endl;
        //flag = 1;
        int c[6];  // 1, 2, 2, 4;
        memset(c, 0, sizeof(c));
        int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
        int cnt = 0;
        for(int i=0; i<n; ++i)
        {
            ss[i].id = i+1;
            scanf("%d", &ss[i].p);
            scanf("%d:%d:%d", &ss[i].t.h, &ss[i].t.m, &ss[i].t.s);
            ss[i].t.tot = ss[i].t.h*3600 + ss[i].t.m*60 + ss[i].t.s;
        }
        sort(ss, ss+n, cmp);
        for(int i=0; i<n; ++i)
        {
            //cout << ss[i].p << "    " << ss[i].t.h << " " << ss[i].t.m << " " << ss[i].t.s << endl;
            c[ss[i].p]++;
        }
        for(int i=0; i<n; ++i)
        {
            if(ss[i].p == 5)
                ss[i].sco = 100;
            else if(ss[i].p == 4)
            {
                ++c4;
                if(c4 <= c[4]/2)
                    ss[i].sco = 95;
                else
                    ss[i].sco = 90;
            }
            else if(ss[i].p == 3)
            {
                ++c3;
                if(c3 <= c[3]/2)
                    ss[i].sco = 85;
                else
                    ss[i].sco = 80;
            }
            else if(ss[i].p == 2)
            {
                ++c2;
                if(c2 <= c[2]/2)
                    ss[i].sco = 75;
                else
                    ss[i].sco = 70;
            }
            else if(ss[i].p == 1)
            {
                ++c1;
                if(c1 <= c[1]/2)
                    ss[i].sco = 65;
                else
                    ss[i].sco = 60;
            }
            else
                ss[i].sco = 50;
        }
        sort(ss, ss+n, cmp2);
        for(int i=0; i<n; ++i)
        {
            //cout << ss[i].p << "    " << ss[i].t.h << " " << ss[i].t.m << " " << ss[i].t.s << endl;
            //c[ss[i].p]++;
        }
        for(int i=0; i<n; ++i)
            cout << ss[i].sco << endl;
        cout << endl;
    }
}