#include<bits/stdc++.h>
using namespace std;
struct stu{
int num,sum,cm,h;
int pm;
bool tong;
}a[10001];
int n,c,m,e;
bool cmp1(stu a,stu b){
if(a.num!=b.num) return a.sum>b.sum;
else if(a.cm!=b.cm) return a.cm>b.cm;
else if(a.h!=b.h) return a.h>b.h;
else{
if(a.num<b.num)
b.tong=1;
else
a.tong=1;
return a.num<b.num;
}
}
bool cmp2(stu a,stu b){
return a.num<b.num;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>c>>m>>e;
a[i].num=i;
a[i].sum=c+m+e;
a[i].cm=c+m;
a[i].h=max(c,m);
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++){
a[i].pm=i;
}
sort(a+1,a+n+1,cmp2);
int k;
for(int i=1;i<=n;i++){
if(a[i].tong==0){
cout<<a[i].pm<<endl;
k=a[i].pm;
}else{
cout<<k<<endl;
}
}
return 0;
}
拿问问了人机,人机说cmp中不能直接修改结构体的tong值,但人机没给有效的解决方法
:(\
附人机原话:
在 cmp1 函数中,对于 a.tong 和 b.tong 的修改会导致未定义行为,因为这两个变量是结构体中的成员,并且是按值传递给 cmp1 的,修改不会影响原结构体中的值,这样的修改没有意义。