新手帮贡排序求助
  • 板块学术版
  • 楼主2_085
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/26 00:10
  • 上次更新2023/10/23 20:28:38
查看原帖
新手帮贡排序求助
968071
2_085楼主2023/3/26 00:10

求助一下大佬 在求解官方题单中的高精度模拟中的帮贡排序的时候,按照题解的思路写的,但老是只通过部分测试点。

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

新手一枚,求大佬指教

2023/3/26 00:10
加载中...