HDU - 6666 Quailty and CCPC

Quailty and CCPC

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6666

题目大意:给你n个团队,d表示金牌团队的比例为10d%(0.1*d),团队排名按题目量优先,如果题目同等,罚时少的优先。题目中解释:奎尔蒂在2017年CCPC决赛中意外获得金牌和银牌。原因解释如下。根据官方规定,金牌数量是参赛队伍数量的10%,四舍五入为最接近的整数。当结果的小数部分正好是0.5时,这是不明确的。共有115个参赛队,奎尔蒂队的排名是12。组织者最初决定把数字四舍五入,所以只有11枚金牌,而奎尔蒂的球队只能赢得银牌。许多人为他辩护反对组织者,说他的团队应该得到一枚金牌。后来,组织者改变了主意,把总数凑齐,奎尔蒂的球队最终赢得了一枚金牌。现在,给你一个比赛的记分板和金牌队伍的比例,你能确定是否有一个队伍,这样他们就可以赢得一枚金牌了,如果金牌的数量是四舍五入时,分数正好是0.5,银牌如果四舍五入?我们可以理解为,只要参赛队伍的数量的10%的小数部分正好是0.5就有那么一个团队能符合题目要求,我们就直接向上取整这个这数就是该队伍的排名。其他不等于0.5的直接输出Quailty is very great即可。

代码如下:

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
struct Team
{
    char str[15];
    ll p, t;
    bool operator<(const Team &q) const//重载 < 运算符 题目量不相等时,罚时少的在前面
    {
        if (p != q.p)
            return p > q.p;
        return t < q.t;
    }
};
Team Te[100005];
ll t, n, d;
int main()
{
    ios::sync_with_stdio(false);
    cin >> t;
    while (t--)
    {
        cin >> n >> d;
        for (ll i = 1; i <= n; ++i)
            cin >> Te[i].str >> Te[i].p >> Te[i].t;
        sort(Te + 1, Te + 1 + n);//对团队进行排名
        double ans = n * (d * 10) / 100.0;//计算能拿到金牌数的比例
        int res = ((int)(ans * 10)) % 10;//取得小数部分
        if (res == 5)//如果小数部分刚好等于5,直接输出ans向上取整的数,即是该团队的排名
        {
            int i = ceil(ans);
            cout << Te[i].str << endl;//输出该团队的名称
        }
        else
            cout << "Quailty is very great" << endl;//如果不等于5输出Quailty is very great
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值