HDOJ 1084 What Is Your Grade?
题目
分类
模拟
题意
计算分数
规则
共 5 个问题
解决 5 个问题 得 100
解决 4 个 先解决得前一半 得 95 后一半得 90 以此类推
解决 0 个 得 50
输出要按输入顺序
题解
按题意模拟即可
先排序 (按题目数 在 按时间 )
依次给分
技巧
输入时分别记录解决各个数目问题得所有时间
由于 输出要按输入顺序 所以 输入时要记录序号 输出时 按序号排序
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 101
using namespace std;
struct student
{
int no;
int q;
int t;
int val;
friend bool operator<(const student & a,const student & b)
{
return a.q == b.q ? a.t < b.t : a.q < b.q;
}
};
student stu[maxn];
int num[6];
int pg[6] = {50,60,70,80,90,100};
bool cmp(const student & a,const student & b)
{
return a.no < b.no;
}
int main()
{
int n,h,m,s,p,tmp;
char ch;
while(cin >> n && n != -1)
{
memset(num,0,sizeof(num));
for(int i = 0;i < n;i++)
{
stu[i].no = i;
cin >> stu[i].q >> h >> ch >> m >> ch >> s;
stu[i].val = pg[stu[i].q];
stu[i].t = h * 3600 + m * 60 + s;
num[stu[i].q] ++;
}
sort(stu,stu+n);
p = num[0];
for(int i = 1;i < 5;i++)
{
if(!num[i])
continue;
tmp = p + num[i] / 2;
// cout << "tmp " << tmp << endl;
for(int j = p;j < tmp;j++)
stu[j].val = pg[i] + 5;
p += num[i];
}
sort(stu,stu+n,cmp);
for(int i = 0;i < n;i++)
cout << stu[i].val << endl;
cout << endl;
}
return 0;
}