在第二次排序的时候一开始按帮贡排序,错了3个点。 后来看了题解换成了按职位排序就过了,这两个有什么不一样吗
第一次70分代码
#include<bits/stdc++.h>
using namespace std;
struct users{
string id,zw,xzw;
int bg,le,s;
}a[120];
bool cmp(users x,users y){
if(x.bg == y.bg) return x.s<y.s;
return x.bg>y.bg;
}
bool cmp2(users x,users y){
if(x.xzw==y.xzw){
if(x.le==y.le){
return x.s<y.s;
}
else return x.le>y.le;
}
return x.bg>y.bg;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].id>>a[i].zw>>a[i].bg>>a[i].le;
a[i].s=i;
}
sort(a+4,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(i==1) a[i].xzw="BangZhu";
else if(i==2||i==3) a[i].xzw="FuBangZhu";
else if(i==4||i==5) a[i].xzw="HuFa";
else if(i>=6&&i<=9) a[i].xzw="ZhangLao";
else if(i>=10&&i<=16) a[i].xzw="TangZhu";
else if(i>=17&&i<=41) a[i].xzw="JingYing";
else a[i].xzw="BangZhong";
}
sort(a+4,a+n+1,cmp2);
for(int i=1;i<=n;i++) cout<<a[i].id<<' '<<a[i].xzw<<' '<<a[i].le<<endl;
}
第二次ac代码
#include<bits/stdc++.h>
using namespace std;
struct users{
string id,zw,xzw;
int bg,le,s;
}a[120];
bool cmp(users x,users y){
if(x.bg == y.bg) return x.s<y.s;
return x.bg>y.bg;
}
int que(string x){
if(x=="BangZhu") return 0;
if(x=="FuBangZhu") return 1;
if(x=="HuFa") return 2;
if(x=="ZhangLao") return 3;
if(x=="TangZhu") return 4;
if(x=="JingYing") return 5;
if(x=="BangZhong") return 6;
}
bool cmp2(users x,users y){
if(x.xzw==y.xzw){
if(x.le==y.le){
return x.s<y.s;
}
else return x.le>y.le;
}
return que(x.xzw) < que(y.xzw);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].id>>a[i].zw>>a[i].bg>>a[i].le;
a[i].s=i;
}
sort(a+4,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(i==1) a[i].xzw="BangZhu";
else if(i==2||i==3) a[i].xzw="FuBangZhu";
else if(i==4||i==5) a[i].xzw="HuFa";
else if(i>=6&&i<=9) a[i].xzw="ZhangLao";
else if(i>=10&&i<=16) a[i].xzw="TangZhu";
else if(i>=17&&i<=41) a[i].xzw="JingYing";
else a[i].xzw="BangZhong";
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++) cout<<a[i].id<<' '<<a[i].xzw<<' '<<a[i].le<<endl;
}