結果

問題 No.447 ゆきこーだーの雨と雪 (2)
ユーザー はまやんはまやんはまやんはまやん
提出日時 2017-04-20 12:33:33
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 13 ms / 2,000 ms
コード長 1,668 bytes
コンパイル時間 2,069 ms
コンパイル使用メモリ 182,228 KB
実行使用メモリ 10,752 KB
最終ジャッジ日時 2024-07-19 20:37:55
合計ジャッジ時間 3,781 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 4 ms
9,984 KB
testcase_01 AC 3 ms
9,984 KB
testcase_02 AC 3 ms
9,856 KB
testcase_03 AC 4 ms
9,984 KB
testcase_04 AC 4 ms
9,984 KB
testcase_05 AC 7 ms
10,496 KB
testcase_06 AC 10 ms
10,624 KB
testcase_07 AC 7 ms
10,368 KB
testcase_08 AC 8 ms
10,368 KB
testcase_09 AC 11 ms
10,624 KB
testcase_10 AC 5 ms
9,984 KB
testcase_11 AC 5 ms
10,112 KB
testcase_12 AC 6 ms
10,112 KB
testcase_13 AC 9 ms
10,624 KB
testcase_14 AC 11 ms
10,752 KB
testcase_15 AC 6 ms
10,112 KB
testcase_16 AC 6 ms
10,112 KB
testcase_17 AC 5 ms
10,112 KB
testcase_18 AC 4 ms
10,112 KB
testcase_19 AC 13 ms
10,624 KB
testcase_20 AC 11 ms
10,752 KB
testcase_21 AC 6 ms
10,112 KB
testcase_22 AC 5 ms
10,240 KB
testcase_23 AC 6 ms
10,112 KB
testcase_24 AC 10 ms
10,368 KB
testcase_25 AC 12 ms
10,624 KB
testcase_26 AC 8 ms
10,112 KB
testcase_27 AC 7 ms
10,112 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)




int N, L[30], T;
int M; string Dic[101010];
int ID[101010], Pro[101010];
//-----------------------------------------------------------------------------------
string Name[101010]; char P[101010];
void init() {
    cin.tie(0);
    ios::sync_with_stdio(false);

    cin >> N;
    rep(i, 0, N) cin >> L[i];
    cin >> T;
    rep(i, 0, T) cin >> Name[i] >> P[i];

    map<string, int> za;
    rep(i, 0, T) za[Name[i]] = 0;
    M = za.size();
    int idx = 0;
    for (auto& p : za) za[p.first] = idx, idx++;
    for (auto& p : za) Dic[p.second] = p.first;

    rep(i, 0, T) ID[i] = za[Name[i]], Pro[i] = P[i] - 'A';
}
//-----------------------------------------------------------------------------------
int cnt[30];
int E[101010][30];
int lastsub[101010];
int main() {
    init();

    rep(t, 0, T) {
        int id = ID[t];
        int pid = Pro[t];

        int rank = cnt[pid] + 1;
        cnt[pid]++;

        E[id][pid] = 50 * L[pid] + 500 * L[pid] / (8 + 2 * rank);
        lastsub[id] = t;
    }

    vector<pair<int, int>> v;
    rep(i, 0, M) {
        int sm = 0;
        rep(j, 0, N) sm += E[i][j];
        v.push_back({ sm, lastsub[i] });
    }

    sort(v.begin(), v.end(), [&](pair<int, int> a, pair<int, int> b) {
        if (a.first != b.first) return a.first > b.first;
        else return a.second < b.second;
    });

    rep(i, 0, M) {
        int rank = i + 1;
        int id = ID[v[i].second];
        string name = Dic[id];

        printf("%d %s ", rank, name.c_str());
        rep(j, 0, N) printf("%d ", E[id][j]);
        printf("%d\n", v[i].first);
    }
}
0