E.冰壶比赛

E.冰壶比赛
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 8 (7 users)Total Accepted: 7 (7 users)Special Judge: No
Description
在某场趣味比赛中,每个选手允许投掷8个投掷物,以离标准线的直线距离最近的投掷物作为该选手的有效投掷物,并将其与投掷点之间的距离定义为最终成绩。规则规定所有选手的最终成绩中与标准线的距离差最短的选手为为冠军,依次类推,要求输出最终排名。

Input
本题只有一组测试数据。
第一行为两个正整型数n和l,用空格分隔,其中n代表有n个选手参加比赛,l代表标准线与投掷点之间的距离。
之后为n行,每行对应一个选手的比赛信息,格式如下:
运动员编号(整型) 运动员姓名 成绩1 成绩2 成绩3 成绩4 ... 成绩8
其中每一个成绩均为正整数,代表了一次投掷后,投掷物与投掷点之间的距离。
Output
输出n行,代表最终排名。每行对应一个运动员的数据,格式如下:
名次 编号 姓名 最终成绩

Sample Input
4 72
1260 QARIXCTPZO 85 77 56 66 71 64 99 44
1480 HOJNORQZEG 84 91 98 60 70 82 72 80
1696 DWQIKKANVM 56 51 86 63 80 61 56 77
1770 SKBJISDIOF 64 75 52 85 94 59 55 79

Sample Output
1 1480 HOJNORQZEG 72
2 1260 QARIXCTPZO 71
3 1770 SKBJISDIOF 75
4 1696 DWQIKKANVM 77

#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;

int n, m;

class athlete
{
public:
    int number;
    string name;
    int a, b, c, d, e, f, g, h;
    int aaa;
    int bbb;
};

void fff(athlete& t)
{
    int qwe = 100;
    qwe = min(qwe, abs(t.a - m)), qwe = min(qwe, abs(t.b - m)), qwe = min(qwe, abs(t.c - m)), qwe = min(qwe, abs(t.d - m));
    qwe = min(qwe, abs(t.e - m)), qwe = min(qwe, abs(t.f - m)), qwe = min(qwe, abs(t.g - m)), qwe = min(qwe, abs(t.h - m));
    t.aaa = qwe;
    if (qwe + m == t.a || qwe + m == t.b || qwe + m == t.c || qwe + m == t.d || qwe + m == t.e || qwe + m == t.f || qwe + m == t.g || qwe + m == t.h)
    {
        t.bbb = qwe + m;
    }
    else t.bbb = m - qwe;
}

int main()
{
    cin >> n >> m;
    athlete* arr = new athlete[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i].number >> arr[i].name >> arr[i].a >> arr[i].b >> arr[i].c >> arr[i].d;
        cin >> arr[i].e >> arr[i].f >> arr[i].g >> arr[i].h;
        fff(arr[i]);
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j].aaa > arr[j + 1].aaa)
            {
                athlete temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << ' ' << arr[i].number << ' ' << arr[i].name << ' ' << arr[i].bbb << endl;
    }
    return 0;
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值