10分求助
查看原帖
10分求助
453759
wangyinghao楼主2022/12/10 17:02

只有第一个测试点对了。

#include<iostream>
#include<algorithm>
using namespace std;

struct node{
	string name,bzw,nzw;
	int exp,lv,id;
}a[115];

int f(string s){
	if(s=="BangZhu") return 0;
	else if(s=="FuBangZhu") return 1;
	else if(s=="HuFa") return 2;
	else if(s=="ZhangLao") return 3;
	else if(s=="TangZhu") return 4;
	else if(s=="JingYing") return 5;
	else if(s=="BangZhong") return 6;
}

bool cmp1(node x,node y){
	if(x.exp==y.exp){
		return x.id<y.id;
	}
	return x.exp>y.exp;
}

bool cmp2(node x,node y){
	if(f(x.nzw)==f(y.nzw)){
		if(x.lv==y.lv) return x.id<y.id;
		return x.lv>y.lv;
	}
	return f(x.nzw)<f(y.nzw);
}

int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].name>>a[i].bzw>>a[i].exp>>a[i].lv;
		a[i].id=i;
	}
	sort(a+4,a+n+1,cmp1);
	for(int i=1;i<=n;i++){
		if(i==1) a[i].nzw="BangZhu";
		else if(i>=2 && i<=3) a[i].nzw="FuBangZhu";
		else if(i>=4 && i<=5) a[i].nzw="HuFa";
		else if(i>=6 && i<=9) a[i].nzw="ZhangLao";
		else if(i>=10 && i<=16) a[i].nzw="ZhangLao";
		else if(i>=17 && i<=41) a[i].nzw="JingYing";
		else a[i].nzw="BangZhong";
	}
	sort(a+1,a+n+1,cmp2);
	for(int i=1;i<=n;i++){
		cout<<a[i].name<<" "<<a[i].nzw<<" "<<a[i].lv<<endl;
	}
	return 0;
}
2022/12/10 17:02
加载中...