PAT(A)1141 PAT Ranking of Institutions (25point(s))

在这里插入图片描述

Sample Input

10
A57908 85 Au
B57908 54 LanX
A37487 60 au
T28374 67 CMU
T32486 24 hypu
A66734 92 cmu
B76378 71 AU
A47780 45 lanx
A72809 100 pku
A03274 45 hypu

Sample Output

5
1 cmu 192 2
1 au 192 3
3 pku 100 1
4 hypu 81 2
4 lanx 81 2

思路:
排序加和。
代码

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <cmath>

using namespace std;

#define endl '\n'

typedef long long ll;

struct node {
    string school;
    double score = 0;
    int a = 0, b = 0, t = 0;
    int num = 0;
}p[100004];

vector<string>v;

map<string, node>mp;

bool cmp(node a, node b)
{
    if (a.score != b.score)
        return a.score > b.score;
    if (a.num != b.num)
        return a.num < b.num;
    return a.school < b.school;
}

int main()
{
    int n;

    cin >> n;

    for (int i = 0; i < n; ++i)
    {
        string id, sc;
        double s;
        cin >> id >> s >> sc;
        for (int j = 0; j < sc.size(); ++j)
            if (sc[j] >= 'A' && sc[j] <= 'Z')
                sc[j] = sc[j] - 'A' + 'a';

        if (sc != mp[sc].school)
        {
            v.push_back(sc);
            mp[sc].school = sc;
        }

        mp[sc].num++;

        if (id[0] == 'A')
        {
            mp[sc].score += s;
            mp[sc].a++;
        }
        if (id[0] == 'B')
        {
            mp[sc].score += s * 1.0 / 1.5;
            mp[sc].b++;
        }
        if (id[0] == 'T')
        {
            mp[sc].score += s * 1.0 * 1.5;
            mp[sc].t++;
        }
    }

    for (int i = 0; i < v.size(); ++i)
    {
        p[i].school = v[i];
        p[i].score = floor(mp[v[i]].score);
        p[i].num = mp[v[i]].num;
    }

    sort(p, p + v.size(), cmp);

    int num = 0;

    cout << v.size() << endl;

    cout << ++num << " " << p[0].school << " ";
    printf("%.0lf", p[0].score);
    cout << " " << p[0].num << endl;

    for (int i = 1; i < v.size(); ++i)
    {
        if (p[i].score == p[i - 1].score)
        {
            cout << num << " " << p[i].school << " ";
            printf("%.0lf", p[i].score);
            cout << " " << p[i].num << endl;
        } else {
            num  = i + 1;
            cout << num << " " << p[i].school << " ";
            printf("%.0lf", p[i].score);
            cout << " " << p[i].num << endl;
        }
    }

    return 0;
}

发布了161 篇原创文章 · 获赞 7 · 访问量 7080

猜你喜欢

转载自blog.csdn.net/weixin_43778744/article/details/104142603