设为首页 加入收藏

TOP

[多态模拟]HDU 1084―― What is Your Grade?
2015-11-21 01:12:26 来源: 作者: 【 】 浏览:3
Tags:模拟 HDU 1084 What Your Grade
模拟题。一场考试一共5道题,满分(都做出来)100,都做不出来50,如果你做对4道,而且做对的时间是所有做对4道题中的人中的前一半及以前(如果4个人做对4个,取前二,如果3个人做对4个,取第一),那么你将获得95分,剩下的人获得90分,同样85,80,75,70……ETC。。
?
看似挺简单,但是判断二分之一着实还是费了一些功夫的,模拟题都很长。。也很容易出错,还有一个trick。
?
在仅有1个人做对的情况下,这个人也是要加五分的,但是如果直接无脑除法的话1/2=0,没有人被加5分,就WA了。。除法最好自己写。。
?
[cpp]?
#include ?
#include ?
#include ?
#include ?
#include ?
using namespace std; ?
??
class student ?
{ ?
public: ?
? ? int solve; ?
? ? int time; ?
? ? int idx; ?
? ? int score; ?
}; ?
??
int div(int g) ?
{ ?
? ? if(g==1) ?
? ? ? ? return 1; ?
? ? else ?
? ? ? ? return g/2; ?
} ?
??
int wastetime(string tar) ?
{ ?
? ? string a,b,c; ?
? ? int an,bn,cn,res=0; ?
? ? for (int i=0;i<=1;i++) ?
? ? ? ? a+=tar[i]; ?
? ? for (int j=3;j<=4;j++) ?
? ? ? ? b+=tar[j]; ?
? ? for (int k=6;k<=7;k++) ?
? ? ? ? c+=tar[k]; ?
? ? an=atoi(a.c_str()); ?
? ? bn=atoi(b.c_str()); ?
? ? cn=atoi(c.c_str()); ?
??
? ? res=an*3600+bn*60+cn; ?
? ? return res; ?
} ?
??
bool cmp(student c1,student c2) ?
{ ?
? ? if (c1.solve!=c2.solve) ?
? ? ? ? return c1.solve>c2.solve; ?
? ? else ?
? ? ? ? return c1.time
} ?
??
bool cmp2(student c1,student c2) ?
{ ?
? ? return c1.idx
} ?
??
int main() ?
{ ?
? ? student aclass[109]; ?
? ? int grade[109]; ?
? ? int countstu[6]; ?
? ? int testcase; ?
? ? while (cin>>testcase && testcase!=-1) ?
? ? { ?
? ? ? ? memset(countstu,0,sizeof(countstu)); ?
? ? ? ? string tar; ?
? ? ? ? for (int i=0;i
? ? ? ? { ?
? ? ? ? ? ? cin>>aclass[i].solve>>tar; ?
??
? ? ? ? ? ? aclass[i].time=wastetime(tar); ?
? ? ? ? ? ? aclass[i].score=aclass[i].solve*10+50; //第一次处理 先给基础分 ?
? ? ? ? ? ? aclass[i].idx=i; ?
? ? ? ? ? ? countstu[aclass[i].solve]++; ?
? ? ? ? } ?
??
? ? ? ? sort(aclass,aclass+testcase,cmp); ?
??
? ? ? ? ??
? ? ? ? int pos=countstu[5]; ?
? ? ? ? ??
? ? ? ? for(int i=pos;i
? ? ? ? { ?
? ? ? ? ? ? aclass[i].score+=5; ?
? ? ? ? } ?
? ? ? ? pos+=countstu[4]; ?
? ? ? ? for(int i=pos;i
? ? ? ? { ?
? ? ? ? ? ? aclass[i].score+=5; ?
? ? ? ? ? ? ??
? ? ? ? } ?
? ? ? ? pos+=countstu[3]; ?
? ? ? ? for(int i=pos;i
? ? ? ? { ?
? ? ? ? ? ? aclass[i].score+=5; ?
? ? ? ? ? ? ??
? ? ? ? } ?
? ? ? ? pos+=countstu[2]; ?
? ? ? ? for(int i=pos;i
? ? ? ? { ?
? ? ? ? ? ? aclass[i].score+=5; ?
? ? ? ? ? ? ??
? ? ? ? } ?
? ? ? ? pos+=countstu[1]; ? ??
??
? ? ? ? sort(aclass,aclass+testcase,cmp2); ?//处理再给排回去 ?
? ? ? ? for (int i=0;i
? ? ? ? { ?
? ? ? ? ? ? cout<
? ? ? ? } ?
? ? ? ? ??
? ? ? ? cout<
??
? ? } ?
? ? return 0; ?
} ?
?
?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇codeforce #164 div2 下一篇百钱买百鸡

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: