成绩排序-题解
2026-05-30 13:47:36
发布于:重庆
27阅读
0回复
0点赞
这题就按照题目进行结构体排序,就并列稍微有点麻烦,但我们只需要在最后稍微遍历处理一下就可以了
Code
#include<bits/stdc++.h>
using namespace std;
struct stu{
int cha, math, eng, id, t;
} p[10005];
bool cmp(stu a, stu b){
int sum = a.cha + a.math + a.eng;
int sum1 = b.cha + b.math + b.eng;
if (sum != sum1) return sum > sum1;
int cm = a.cha + a.math;
int cm1 = b.cha + b.math;
if (cm != cm1) return cm > cm1;
int cmm = max(a.cha, a.math);
int cmm1 = max(b.cha, b.math);
if (cmm != cmm1) return cmm > cmm1;
return false;
}
int n, k = 1;
int ans[10005];
int main(){
cin >> n;
for (int i = 1;i <= n;i ++){
cin >> p[i].cha >> p[i].math >> p[i].eng;
p[i].id = i;
}
sort(p + 1, p + n + 1, cmp);
p[1].t = k;
for (int i = 2;i <= n;i ++){
int r1 = (p[i - 1].cha + p[i - 1].math + p[i - 1].eng) == (p[i].cha + p[i].math + p[i].eng);
int r2 = (p[i - 1].cha + p[i - 1].math) == (p[i].cha + p[i].math);
int r3 = max(p[i - 1].cha, p[i - 1].math) == max(p[i].cha, p[i].math);
if (r1 && r2 && r3) p[i].t = k;
else{
k = i;
p[i].t = k;
}
}
for (int i = 1;i <= n;i ++){
ans[p[i].id] = p[i].t;
}
for (int i = 1;i <= n;i ++){
cout << ans[i] << endl;
}
return 0;
}
不一定是最优解,但一定能过(Doge
这里空空如也







有帮助,赞一个