求助一下大佬 在求解官方题单中的高精度模拟中的帮贡排序的时候,按照题解的思路写的,但老是只通过部分测试点。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef struct palyer
{
string name, position;
long long contribution, level;
int g,a;
}pr;
pr p[115];
int num = 0;
map<string, int> position_2;
bool cmp_1(pr x, pr y)
{
if (x.contribution != y.contribution)
return x.contribution > y.contribution;
else
return x.a < y.a;
}
bool cmp_2(pr x, pr y)
{
if (position_2[x.position] != position_2[y.position])
{
return x.g>y.g;
}
else
{
if (x.level == y.level)
{
return x.a < y.a;
}
return x.level > y.level;
}
}
int main()
{
position_2["BangZhu"] = 6;
position_2["FuBangZhu"] = 5;
position_2["HuFa"] = 4;
position_2["ZhangLao"] = 3;
position_2["TangZhu"] = 2;
position_2["JingYing"] = 1;
position_2["BangZhong"] = 0;
cin >> num;
for (int i = 1; i <=num; i++)
{
cin >> p[i].name >> p[i].position >> p[i].contribution >> p[i].level;
p[i].g = position_2[p[i].position];
p[i].a = i;
}
sort(p + 4, p + num+1, cmp_1);
for (int i = 4; i <= num; i++)
{
if (i <= 5)
{
p[i].position = "HuFa";
}
else if (i <= 9)
{
p[i].position = "ZhangLao";
}
else if (i <= 16)
{
p[i].position = "TangZhu";
}
else if (i <= 41)
{
p[i].position = "JingYing";
}
else
{
p[i].position = "BangZhong";
}
}
sort(p+1,p+num+1,cmp_2);
for (int i = 1 ; i<=num ; i++)
{
cout << p[i].name << ' ' << p[i].position << ' ' << p[i].level ;
if (i != num)
cout << '\n';
}
return 0;
}
新手一枚,求大佬指教