样例已过,照着第一篇题解调了半天没有发现问题。求调。
#include <iostream>
#include <algorithm>
// 成员
struct member
{
std::string name, job; // 名字, 工作
int id, contribution, level; // 输入序号, 帮贡, 等级
};
member faction[115]; // 帮派
int change(std::string a)
{
if (a == "Bangzhu")
return 1;
if (a == "FuBangZhu")
return 2;
if (a == "HuFa")
return 3;
if (a == "ZhangLao")
return 4;
if (a == "TangZhu")
return 5;
if (a == "JingYing")
return 6;
if (a == "BangZhong")
return 7;
}
bool cmp1(member a, member b) // 第一轮排序
{
if (a.contribution != b.contribution)
return a.contribution > b.contribution;
return a.id < b.id;
}
bool cmp2(member a, member b) // 第二轮排序
{
if (a.job != b.job)
return change(a.job) < change(b.job);
if (a.level != b.level)
return a.level > b.level;
return a.id < b.id;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int n;
std::cin >> n;
for (int i = 1; i <= n; i++)
{
faction[i].id = i;
std::cin >> faction[i].name >> faction[i].job >> faction[i].contribution >> faction[i].level;
}
std::sort(faction + 4, faction + n + 1, cmp1);
for (int i = 4; i <= n; i++) // 调整职位
{
if (i <= 5)
faction[i].job = "HuFa";
else if (i <= 9)
faction[i].job = "ZhangLao";
else if (i <= 16)
faction[i].job = "TangZhu";
else if (i <= 41)
faction[i].job = "JingYing";
else
faction[i].job = "BangZhong";
}
std::sort(faction + 1, faction + n + 1, cmp2);
for (int i = 1; i <= n; i++)
std::cout << faction[i].name << " " << faction[i].job << " " << faction[i].level << "\n";
return 0;
}