*就10分,样例过了*
查看原帖
*就10分,样例过了*
694401
zzh0806楼主2022/11/6 22:29
#include<bits/stdc++.h>
using namespace std;

typedef struct{
	string Name;//姓名 
	string Posts;//职位 
	int Contribute, Range, ex;//贡献,等级,经验 
}Menber;

string i_to_s(int n){//数到字符串的转换 
	if(n == 0) return "BangZhu";
	if(n <= 2) return "FuBangZhu";
	if(n <= 4) return "HuFa";
	if(n <= 8) return "ZhangLao";
	if(n <= 15) return "Tangzhu";
	if(n <= 40) return "JingYing";
	return "BangZhong";
}
 
int s_to_i(string s){//字符串到数的转化 
	if(s == "BangZhu") return 0;
	if(s == "FuBangZhu") return 1;
	if(s == "HuFa") return 2;
	if(s == "zhangLao") return 3;
	if(s == "TangZhu") return 4;
	if(s == "JingYing") return 5;
	 return 6;
}

bool cmp1(Menber A, Menber B){
	if(A.Contribute != B.Contribute) return A.Contribute>B.Contribute;
	return A.ex < B.ex;
}


bool cmp2(Menber A, Menber B){
	int A1 = s_to_i(A.Posts),B1 = s_to_i(B.Posts);//将职位转换为数字,来进行操作 
	if(A1 != B1) return A1 < B1;
	if(A.Range != B.Range) return A.Range > B.Range;
	return A.ex < B.ex;
}

int main(void){
    Menber menbers[120];
    int Num_menbers;
	cin >> Num_menbers;
   //输入
	for(int i =0; i < Num_menbers; i ++){
		menbers[i].ex = i;
		cin >> menbers[i].Name >> menbers[i].Posts >> menbers[i].Contribute >> menbers[i].Range;
	}
	
   //处理
	sort(menbers+3,menbers+Num_menbers,cmp1);//第一遍排序 
	
	for(int i = 0; i<Num_menbers; i ++){//赋予职位 
		menbers[i].Posts = i_to_s(i);
	}
	
	sort(menbers,menbers+Num_menbers,cmp2);//第二遍排序 
	
   //输出
	for(int i = 0; i < Num_menbers; i ++){
		cout <<  menbers[i].Name << ' ' << menbers[i].Posts << ' '
		<< menbers[i].Range;
		cout << endl;
	} 
	
	return 0;
}
2022/11/6 22:29
加载中...