Cod sursa(job #2487960)

Utilizator flibiaVisanu Cristian flibia Data 5 noiembrie 2019 21:49:04
Problema Fractal Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long 

using namespace std;

string s;

map<string, int> mp;
vector<pair<string, vector<string>> > v;

bool cmp(pair<string, vector<string> > a, pair<string, vector<string> > b) {
    int sz = min((int) a.se.size(), (int) b.se.size());
    int i = 0;
    for (; i < sz; ) {
        if (mp[a.se[i]] > mp[b.se[i]])
            return 1; 
        if (mp[a.se[i]] < mp[b.se[i]])
            return 0;
        i++;
    }

    if ((int) a.se.size() == sz && (int) b.se.size() == sz)
        return a.fi < b.fi;

    return (int) a.se.size() < (int) b.se.size(); 
}

int main() {
    ifstream cin("tst.in");
    // ofstream cout("tst.out");
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);

    mp["inferior"] = 0;
    mp["mediu"] = 1;
    mp["superior"] = 2;

    while (getline(cin, s)) {
        int p = 0;
        int n = s.size();
        string cuv = "";
        while (p < n && s[p] != ':') {
            cuv += s[p];
            p++;
        }

        p++;
        p++;
        vector<string> u;
        while (p < n) {
            string wr = "";
            while (p < n && s[p] != '-') {
                wr += s[p];
                p++;
            }

            u.push_back(wr);
            p++;
        }

        v.push_back({cuv, u});
    }

    sort(v.begin(), v.end(), cmp);  
    for (int i = 0; i < 2; i++)
        cout 
    for (auto it : v)
        cout << it.fi << '\n';
    return 0;
}