【问题描述】

学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。

【输入格式】

首先输入一个整型数 n (1≤n≤106),表示有 n 位同学。

紧跟着 n 行输入,每一行格式为:宿舍号 name height weight。
宿舍号的区间为 [0, 999999], name 由字母组成,长度小于 16,height,weight 为正整数。

【输出格式】

按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。

注意宿舍号不足 6 位的,要按 6 位补齐前导 0。

【输入样例】

7

000000 Tom 175 120

000001 Jack 180 130

000001 Hale 160 140

000000 Marry 160 120

000000 Jerry 165 110

000003 ETAF 183 145

000001 Mickey 170 115

【输出样例】

000000 Tom 175 120

000001 Jack 180 130

000003 ETAF 183 145

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iomanip>

using namespace std;

class Student
{
public:
string room;
string name;
int height;
int weight;
void print()
{
cout << setfill('0') << setw(6) << room << " " << name << " " << height << " " << weight << endl;
}
};

bool cmp(Student stu1, Student stu2)
{
if (stu1.room != stu2.room)
return stu1.room < stu2.room;
else
return stu1.height > stu2.height;
}

void print(vector<Student> stu)
{
string temp = "";
for (auto i : stu)
{
if (i.room != temp)
{
temp = i.room;
i.print();
}
}
}

int main()
{
int n;
Student temp;
vector<Student> student;
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> temp.room >> temp.name >> temp.height >> temp.weight;
student.push_back(temp);
}

// 优先按照宿舍号排序,宿舍号相同按照身高排序
sort(student.begin(), student.end(), cmp);

// 挑选出寝室中最高的同学进行打印
print(student);
}