题解
简单的结构体排序,自定义一个比较函数即可,C++中有三种使用方法
方法一:自定义cmp函数
#include <bits/stdc++.h>
using namespace std;
struct Node {
int a, b, c, id, sum;
} arr[305];
bool cmp (Node x, Node y) {
if(x.sum == y.sum) {
if(x.a == y.a) return x.id < y.id;
return x.a > y.a;
}
return x.sum > y.sum;
}
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> arr[i].a >> arr[i].b >> arr[i].c;
arr[i].id = i + 1, arr[i].sum = arr[i].a + arr[i].b + arr[i].c;
}
sort(arr, arr + n, cmp);
for(int i = 0; i < 5; i++) {
cout << arr[i].id << " " << arr[i].sum << endl;
}
return 0;
}
方法二:使用匿名函数
#include <bits/stdc++.h>
using namespace std;
struct Node {
int a, b, c, id, sum;
} arr[305];
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> arr[i].a >> arr[i].b >> arr[i].c;
arr[i].id = i + 1, arr[i].sum = arr[i].a + arr[i].b + arr[i].c;
}
sort(arr, arr + n, [](Node x, Node y) {
if(x.sum == y.sum) {
if(x.a == y.a) return x.id < y.id;
return x.a > y.a;
}
return x.sum > y.sum;
});
for(int i = 0; i < 5; i++) {
cout << arr[i].id << " " << arr[i].sum << endl;
}
return 0;
}
方法三:重载小于号
#include <bits/stdc++.h>
using namespace std;
struct Node {
int a, b, c, id, sum;
const bool operator < (const Node &x) const {
if(sum == x.sum) {
if(a == x.a) return id < x.id;
return a > x.a;
}
return sum > x.sum;
}
} arr[305];
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> arr[i].a >> arr[i].b >> arr[i].c;
arr[i].id = i + 1, arr[i].sum = arr[i].a + arr[i].b + arr[i].c;
}
sort(arr, arr + n);
for(int i = 0; i < 5; i++) {
cout << arr[i].id << " " << arr[i].sum << endl;
}
return 0;
}