是这样,蒟蒻在看完题解区后有所想法,想在输出格式上通过”第二层循环“中的判断,按递增的id顺序,找到对应的排名并输出 样例过了,但提交只有三十分,求大佬斧正(哭哭) 代码如下:
#include<bits/stdc++.h>
using namespace std;
struct stu{
int id;
int ran;//排名
int ch;
int ma;
int en;
int sum;//总成绩
};
bool cmp(stu &a,stu &b){
if(a.sum!=b.sum){
return a.sum>b.sum;
}
else if((a.ch+a.ma)!=(b.ch+b.ma)){
return a.ch+a.ma>b.ch+b.ma;
}
else if(max(a.ch,a.ma)!=max(b.ch,b.ma)){
return max(a.ch,a.ma)>max(b.ch,b.ma);
}
else{
return a.id<b.id;
}
}
bool cmp1(stu &a,stu &b){//直接把cmp复制过来了,但稍有改动
if(a.sum!=b.sum){
return a.sum>b.sum;
}
else if((a.ch+a.ma)!=(b.ch+b.ma)){
return a.ch+a.ma>b.ch+b.ma;
}
else if(max(a.ch,a.ma)!=max(b.ch,b.ma)){
return max(a.ch,a.ma)>max(b.ch,b.ma);
}
else{
a.ran=b.ran;//再排一遍同时找到重复排名,可能有点多余
return a.id<b.id;
}
}
int main()
{
int n;
int tip;
stu a[20000];
scanf("%d",&n);//防TL,下同
for(int i=1;i<=n;i++){
scanf("%d%d%d",&a[i].ch,&a[i].ma,&a[i].en);
a[i].sum=a[i].ch+a[i].ma+a[i].en;
a[i].id=i;
}
sort(a+1,a+1+n,cmp);//排序
for(int i=1;i<=n;i++){a[i].ran=i;}
sort(a+1,a+1+n,cmp1);//找排名
for(int i=1;i<=n;i++){//列排名
for(int j=1;j<=n;j++){
if(a[j].id==i){//找对应id的排名,所谓“第二层循环”
printf("%d\n",a[j].ran);
}
}
}
//cin>>tip;
//f(tip==1){
// return main();
//}
//else{
// return 0;
//}
//重置程序,方便样例排查
return 0;
}