Files
python/TangDou/LuoGuBook/P1786.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

85 lines
2.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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