|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
using namespace std;
|
|
|
/*
|
|
|
1.所有信息输入后排序,排序方式如下:
|
|
|
(1)先按帮贡排序;
|
|
|
(2)如帮贡一样,则按输入顺序排列。
|
|
|
|
|
|
2.再重新编好职位后排输出顺序,也就是职位内的排名,排序方式如下:
|
|
|
(1)先按现在的职位排序;
|
|
|
(2)如职位相同,再按等级排序;
|
|
|
(3)如果恰好等级还破天荒地一样,则按输入顺序排列。
|
|
|
*/
|
|
|
const int N = 120;
|
|
|
int n;
|
|
|
struct Node {
|
|
|
string Name, ZhiWei, NewZhiWei;//姓名,职位,修改后职位
|
|
|
long long GongXian;//帮贡
|
|
|
int DengJi, Order;//等级,序号
|
|
|
} s[N];
|
|
|
|
|
|
int get(string a) {
|
|
|
if (a == "BangZhu") return 0;
|
|
|
if (a == "FuBangZhu") return 1;
|
|
|
if (a == "HuFa") return 2;
|
|
|
if (a == "ZhangLao") return 3;
|
|
|
if (a == "TangZhu") return 4;
|
|
|
if (a == "JingYing") return 5;
|
|
|
if (a == "BangZhong") return 6;
|
|
|
}
|
|
|
|
|
|
//第一轮排序规则
|
|
|
// 按贡献排,如果贡献一样的话,那么按输入的顺序排
|
|
|
int cmp1(Node x, Node y) {
|
|
|
if (x.GongXian == y.GongXian) return x.Order < y.Order;
|
|
|
return x.GongXian > y.GongXian;
|
|
|
}
|
|
|
|
|
|
//(1)先按现在的职位排序;
|
|
|
//(2)如职位相同,再按等级排序;
|
|
|
//(3)如果恰好等级还破天荒地一样,则按输入顺序排列。
|
|
|
int cmp2(Node x, Node y) {
|
|
|
if (get(x.NewZhiWei) == get(y.NewZhiWei)) {
|
|
|
if (x.DengJi == y.DengJi) return x.Order < y.Order;
|
|
|
return x.DengJi > y.DengJi;
|
|
|
}
|
|
|
return get(x.NewZhiWei) < get(y.NewZhiWei);
|
|
|
}
|
|
|
|
|
|
int main() {
|
|
|
cin >> n;
|
|
|
//输入
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
cin >> s[i].Name >> s[i].ZhiWei >> s[i].GongXian >> s[i].DengJi;
|
|
|
s[i].Order = i;
|
|
|
}
|
|
|
//因为有一位帮主,两位副帮主,所以,前三名已经被占领,不需要排,只需要把第4位开始的进行排即可。
|
|
|
sort(s + 3, s + n, cmp1);
|
|
|
|
|
|
//依题意,重新安排职位
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
if (i == 0)
|
|
|
s[i].NewZhiWei = "BangZhu";
|
|
|
else if (i == 1 || i == 2)
|
|
|
s[i].NewZhiWei = "FuBangZhu";
|
|
|
else if (i == 3 || i == 4)
|
|
|
s[i].NewZhiWei = "HuFa";
|
|
|
else if (i >= 5 && i <= 8)
|
|
|
s[i].NewZhiWei = "ZhangLao";
|
|
|
else if (i >= 9 && i <= 15)
|
|
|
s[i].NewZhiWei = "TangZhu";
|
|
|
else if (i >= 16 && i <= 40)
|
|
|
s[i].NewZhiWei = "JingYing";
|
|
|
else
|
|
|
s[i].NewZhiWei = "BangZhong";
|
|
|
}
|
|
|
|
|
|
//二轮排序
|
|
|
sort(s, s + n, cmp2);
|
|
|
|
|
|
//输出结果
|
|
|
for (int i = 0; i < n; i++)
|
|
|
cout << s[i].Name << " " << s[i].NewZhiWei << " " << s[i].DengJi << endl;
|
|
|
return 0;
|
|
|
} |