You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}