【问题描述】
学校选拔篮球队员,每间宿舍最多有 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); }
|