jyz120609 @ 2022-08-05 10:45:28
为什么我Dev-c++样例没问题,但是到洛谷只有60分?麻烦大佬们看看,给点指导,谢谢!
#include <bits/stdc++.h>
using namespace std;
struct node {
int z;
int ch;
int ma;
int en;
} a[99999];
bool cmp(node x,node y) {
if(x.ch+x.ma+x.en!=y.ch+y.ma+y.en) return x.ch+x.ma+x.en>y.ch+y.ma+y.en;
else return x.z>y.z;
}
int main() {
int n,i;
cin>>n;
for(i=1; i<=n; i++) {
cin>>a[i].ch>>a[i].ma>>a[i].en;
a[i].z=i;
}
sort(a+1,a+n+1,cmp);
for(i=1; i<=5; i++)
cout<<a[i].z<<" "<<a[i].ch+a[i].ma+a[i].en<<endl;
}
by flame_soul @ 2022-08-05 10:54:19
@jyz120609 总分相同是先按语文排的
by 野生小卒 @ 2022-08-05 10:55:06
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面
你排序函数不太对
by __er @ 2022-08-05 11:20:58
@jyz120609 我一般这么写,详细点,不容易错,好排查,return 1;表示交换,return 0;表示不交换:
struct stu {
int ch, en, ma, num, tot;
} a[301];
bool cmp(stu a, stu b) {
if (a.tot > b.tot) {
return 1;
}
if (a.tot == b.tot && a.ch > b.ch) {
return 1;
}
if (a.tot == b.tot && a.ch == b.ch && a.num < b.num) {
return 1;
}
return 0;
}
by jyz120609 @ 2022-08-05 11:31:37
@野生小卒 谢谢!
by jyz120609 @ 2022-08-05 11:32:03
@flame_soul 谢谢!
by jyz120609 @ 2022-08-05 11:32:29
@__er 谢谢!