E.冰壶比赛 | |||||
| |||||
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;
}