Submission #1364096

#TimeUsernameProblemLanguageResultExecution timeMemory
1364096val1262PPP (EGOI23_ppp)C++20
16 / 100
11 ms16096 KiB
#include <iostream>
#include <vector>
using namespace std;

const int MAX_JOURS = 2000;
int nbParticipants, nbJours;
int prsnActu[MAX_JOURS], tps[MAX_JOURS][MAX_JOURS]; //[idM][idP]

void init() {
    cin >> nbParticipants >> nbJours;
    for (int idM = 0; idM < nbJours; idM++) {
        prsnActu[idM] = -1;
        for (int idP = 0; idP < nbParticipants; idP++) {
            tps[idM][idP] = -1; 
        }
    }
}

void st1() { //N = 2
    int tpsST1[2000000][2];

    for (int idJ = 0; idJ < nbJours; idJ++) {
        int x, y;
        cin >> x >> y; 
        for (int idM = 0; idM < idJ; idM++) {
            if (prsnActu[idM] == y) {
                prsnActu[idM] = x;
                if (tpsST1[idM][x] == -1) tpsST1[idM][x] = 0;
            }
            tpsST1[idM][prsnActu[idM]]++;
        }
        prsnActu[idJ] = x;
        tpsST1[idJ][x] = 1;
    }

    vector<int> nbMedailles(nbParticipants, 0);
    for (int idM = 0; idM < nbJours; idM++) {
        int idTpsMax = 0;
        for (int idP = 0; idP < nbParticipants; idP++) {
            if (tpsST1[idM][idP] > tpsST1[idM][idTpsMax]) {
                idTpsMax = idP;
            }
        }
        nbMedailles[idTpsMax]++;
        //cout << "\n medaille num " << idM << " passe + de tps avec " << idTpsMax << '\n';
    }

    for (int idP = 0; idP < nbParticipants; idP++) {
        cout << nbMedailles[idP] << ' ';
    }
    cout << '\n';
}

void jours() {
    for (int idJ = 0; idJ < nbJours; idJ++) {
        int x, y;
        cin >> x >> y; 
        
        for (int idM = 0; idM < idJ; idM++) {
            if (prsnActu[idM] == y) {
                prsnActu[idM] = x;
                if (tps[idM][x] == -1) tps[idM][x] = 0;
            }
            tps[idM][prsnActu[idM]]++;
        }
        prsnActu[idJ] = x;
        tps[idJ][x] = 1;
    }
}

void affiche() {
    vector<int> nbMedailles(nbParticipants, 0);
    for (int idM = 0; idM < nbJours; idM++) {
        int idTpsMax = 0;
        for (int idP = 0; idP < nbParticipants; idP++) {
            if (tps[idM][idP] > tps[idM][idTpsMax]) {
                idTpsMax = idP;
            }
        }
        nbMedailles[idTpsMax]++;
        //cout << "\n medaille num " << idM << " passe + de tps avec " << idTpsMax << '\n';
    }

    for (int idP = 0; idP < nbParticipants; idP++) {
        cout << nbMedailles[idP] << ' ';
    }
    cout << '\n';
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    init();
    if (nbParticipants == 2) st1();
    else {
        jours();
        affiche();
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...