一定要把题读懂!!!!
首先按照他给的要求进行排序
然后他要按照原来顺序输出排名
那么就直接按照原来序号再排一次,循环输出就行了~~~~
qwq
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define sz(x) (int)x.size()
struct o{
int a,b,c,sum1;//三者和
int sum2;//二者和
int z;//最大值
int id;//原来的顺序
int pai;//排名
};
bool cmp(o a,o b){
if(a.sum1!=b.sum1)return a.sum1<b.sum1;
if(a.sum2!=b.sum2)return a.sum2<b.sum2;
if(a.z!=b.z)return a.z<b.z;
return false;
}
int cmp2(o a,o b){
return a.id<b.id;
}
void solve(){
int n;cin>>n;
vector<o> a(n);
for(int i=0;i<n;i++){
cin>>a[i].a>>a[i].b>>a[i].c;
a[i].sum1=a[i].a+a[i].b+a[i].c;
a[i].sum2=a[i].a+a[i].b;
a[i].z=max(a[i].a,a[i].b);
a[i].id=i+1;
}
sort(a.begin(),a.end(),cmp);//按照成绩排序
int t=1;
for(int i=n-1;i>=0;i--){
if(i==n-1)a[i].pai=t;
else if(a[i].sum1==a[i+1].sum1&&a[i].sum2==a[i+1].sum2&&a[i].z==a[i+1].z){a[i].pai=a[i+1].pai;t++;}
else a[i].pai=++t;
}
sort(a.begin(),a.end(),cmp2);//按照序号排序
for(int i=0;i<n;i++){
cout<<a[i].pai<<endl;
}
}
signed main()
{
solve();
return 0;
}