[入门]92787题解
2025-12-09 21:08:35
发布于:广东
20阅读
0回复
0点赞
题意过于简单,这里不在累赘。
思路
本题一眼就是一个简单的排序,使用sort即可。当然需注意题目要求“循序前的在前面”,也就是要求稳定排序,可是sort函数使用的是快速排序,是不稳定的,该怎么办呢。这时,我们可以通过给每个结构体在加一个数:id,用来存储它们的先后顺序,id小的在前,大的在后即可。
注:如果不想用存id这种方法的话可以用stable_sort函数,其使用的是插入排序,虽不及快速排序那样快,但是稳定。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
struct node{
int a , b , c , id;
string name;//不知道为什么看见name变量在结构体和数组里面就烦
};
node a[N];
int n;
bool cmp(node a , node b){
if(a.a + a.b + a.c == b.a + b.b + b.c){
if(a.a == b.a){
if(a.b == b.b){
if(a.c == b.c){
return a.id < b.id;
}
return a.c > b.c;
}
return a.b > b.b;
}
return a.a > b.a;
}
return a.a + a.b + a.c > b.a + b.b + b.c;
}
int main(){
cin >> n;
for(int i = 1;i <= n;i ++){
cin >> a[i].name >> a[i].a >> a[i].b >> a[i].c;
a[i].id = i;
}抄nm的代码
sort(a + 1 , a + 1 + n , cmp);
for(int i = 1;i <= n;i ++){
cout << a[i].name << ' ' << a[i].a + a[i].b + a[i].c << endl;
}
return 0;
}
这里空空如也

有帮助,赞一个