mayoko’s diary

プロコンとかいろいろ。

SRM 481 div2 hard: BatchSystem

解法

user ごとに, タスクの合計時間が決まります。
合計時間が短いものから順にタスクをこなしていくのが明らかに最適なので, そのように並べましょう。

class BatchSystem {
public:
    vector <int> schedule(vector <int> duration, vector <string> user) {
        map<string, vector<pii> > mp;
        int n = duration.size();
        for (int i = 0; i < n; i++) {
            mp[user[i]].emplace_back(duration[i], i);
        }
        vector<pair<ll, vi> > P;
        for (auto el : mp) {
            ll sum = 0;
            vi v;
            for (pii e : el.second) {
                sum += e.first;
                v.push_back(e.second);
            }
            sort(v.begin(), v.end());
            P.push_back(make_pair(sum, v));
        }
        sort(P.begin(), P.end());
        vi ret;
        for (auto el : P) {
            for (int e : el.second) ret.push_back(e);
        }
        return ret;
    }
};