Rezultati

Up. imeNalogaJezikRezultatČas oddaje
zerodays-2018 Prehitevanje C++ 100/100OK 04. okt '18 @ 18:38

Test Točke Porabljen spomin Porabljen čas Status
#1 16/16 3,121 MiB 0,004 s OK
#2 16/16 3,039 MiB 0,000 s OK
#3 17/17 3,195 MiB 0,004 s OK
#4 17/17 4,566 MiB 0,610 s OK
#5 17/17 30,656 MiB 0,000 s OK
#6 17/17 3,043 MiB 0,000 s OK

Ocenjevani program (prehitevanje.cpp):
#include <iostream>
#include <vector>
#include <map>

using namespace std;

class Neki {
  public:
    Neki * spredi;
    Neki * zadi;
    string ime;
};

int main() {
    int n, p;
    cin >> n;

    Neki * spredi = nullptr;
    Neki * trenutni = nullptr;
    Neki * zadi = nullptr;
    Neki * prvi = nullptr;

    map<string, Neki*> tekmovalci;

    for (int i = 0; i < n; ++i) {
        string ime;
        cin >> ime;

        zadi = new Neki();
        zadi->ime = ime;

        if (trenutni != nullptr) {
            trenutni->spredi = spredi;
            trenutni->zadi = zadi;

            tekmovalci[trenutni->ime] = trenutni;

            if (prvi == nullptr) {
                prvi = trenutni;    
            }
        }

        spredi = trenutni;
        trenutni = zadi;
    }

    trenutni->spredi = spredi;
    tekmovalci[trenutni->ime] = trenutni;

    cin >> p;

//////////////
    // Neki * endrug = prvi;
    // for (int i = 0; i < n; ++i) {
    //     cout << endrug->ime << endl;
    //     endrug = endrug->zadi;
    // }
    // cout << "\n\n\n";
//////////////

    for (int i = 0; i < p; ++i) {
        string x, y; 
        cin >> x >> y;
        if (x == y) continue;

        Neki * X = tekmovalci[x];
        Neki * Y = tekmovalci[y];

        Neki * spredi_x = X->spredi;
        Neki * zadi_x = X->zadi;
        
        if (spredi_x != nullptr) {
            spredi_x->zadi = zadi_x;
        }
        if (zadi_x != nullptr) {
            zadi_x->spredi = spredi_x;
            if (spredi_x == nullptr) {
                prvi = zadi_x;
            }
        }
    
        Neki * pred_y = Y->spredi;

        Y->spredi = X;
        X->zadi = Y;

        // cout << "----- " << X->ime << " " << X->zadi->ime << endl;

        if (pred_y == nullptr) {
            tekmovalci[x]->spredi = nullptr;
            prvi = X;
        } else {
            X->spredi = pred_y;
            pred_y->zadi = X;
        }

//////////////
    //     endrug = prvi;
    //     for (int i = 0; i < n; ++i) {
    //         cout << endrug->ime << endl;
    //         endrug = endrug->zadi;
    //     }

    // cout << "\n\n\n";
///////////////
    }

    for (int i = 0; i < n; ++i) {
        cout << prvi->ime << endl;
        prvi = prvi->zadi;
    }

    return 0;
}