急,在线等,10分,样例通过
  • 板块P1786 帮贡排序
  • 楼主XSean
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/8/28 00:17
  • 上次更新2023/10/27 13:23:11
查看原帖
急,在线等,10分,样例通过
546830
XSean楼主2022/8/28 00:17
#include<bits/stdc++.h>
using namespace std;
string zw[8]={"BangZhu","FuBangZhu","HuFa","ZhangLao","TangZhu","JingYing","BangZhong"};
struct bz{
	string name;
	string job;
	int job1;
	int bg,dj;
	int f;
}arr[120];
bool cmp1(bz a,bz b){
	if(a.f!=1&&b.f!=1)	return a.bg>b.bg;
}
bool cmp2(bz a,bz b){
	if(a.job1==b.job1) return a.dj>b.dj;
	else return a.job1<b.job1;
}
int main(){
/*
freopen (".in","r",stdin);
freopen (".out","w",stdout);
*/
int n;
cin>>n;
for(int i=0;i<n;i++){
	cin>>arr[i].name>>arr[i].job>>arr[i].bg>>arr[i].dj;
	if(arr[i].job=="BangZhu"||arr[i].job=="FuBangZhu") arr[i].f=1;
	else arr[i].f=0;
}

//cout<<endl;
//for(int i=0;i<n;i++){
//	cout<<arr[i].name<<" "<<arr[i].job<<" "<<arr[i].dj<<endl;
//}
//cout<<endl;

sort(arr,arr+n,cmp1);

//cout<<endl;
//for(int i=0;i<n;i++){
//	cout<<arr[i].name<<" "<<arr[i].job<<" "<<arr[i].dj<<endl;
//}
//cout<<endl;
int cnt=0;
for(int i=0;i<n;i++){
	//两位护法,四位长老,七位堂主,二十五名精英,帮众...
	if(!arr[i].f) ++cnt;
	if(arr[i].job=="BangZhu"){
		arr[i].job1=0;
		continue;
	} 
	if(arr[i].job=="FuBangZhu"){
		arr[i].job1=1;
		continue;
	} 
	if(cnt>=1&&cnt<=2){
		arr[i].job1=2;
		arr[i].job="HuFa";
	} 
	else if(cnt>=3&&cnt<=6){
		arr[i].job1=3;
		arr[i].job="ZhangLao";
	} 
	else if(cnt>=7&&cnt<=13){
		arr[i].job1=4;
		arr[i].job="TangZhu";
	} 
	else if(cnt>=14&&cnt<=38){
		arr[i].job1=5;	
		arr[i].job="JingYing";
	}else if(cnt>=39){
		arr[i].job1=6;
		arr[i].job="BangZhong";
	} 
}
sort(arr,arr+n,cmp2);
for(int i=0;i<n;i++){
	cout<<arr[i].name<<" "<<arr[i].job<<" "<<arr[i].dj<<endl;
} 




/*
fclose(stdin);
fclose(stdout);
*/
	return 0;
}

2022/8/28 00:17
加载中...