Rezultati

Up. imeNalogaJezikRezultatČas oddaje
jelke-2018 Droni C++ 0/100Prekoračen čas (TLE) 10. maj '18 @ 19:45

Test Točke Porabljen spomin Porabljen čas Status
#1 0/5 3,203 MiB 0,000 s Prekoračen čas
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#2 0/5 3,105 MiB 0,004 s Napačen odgovor
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#3 5/5 3,156 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#4 5/5 3,156 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#5 5/5 3,156 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#6 5/5 3,098 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#7 0/5 3,203 MiB 0,000 s Prekoračen čas
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#8 0/5 3,188 MiB 0,000 s Prekoračen čas
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#9 0/5 3,102 MiB 0,004 s Napačen odgovor
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#10 5/5 3,152 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#11 0/5 3,184 MiB 0,000 s Prekoračen čas
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#12 5/5 3,102 MiB 0,004 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#13 5/5 3,148 MiB 0,004 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#14 5/5 3,156 MiB 0,004 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#15 5/5 3,156 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#16 5/5 3,156 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#17 5/5 3,102 MiB 0,004 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#18 5/5 3,156 MiB 0,004 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#19 0/5 3,258 MiB 0,000 s Prekoračen čas
Povratna informacija sodniškega sistema:
​The program made an invalid move.
#20 5/5 3,102 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.

Ocenjevani program (Droni.cpp):
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>

using namespace std;


struct Koordinate {
    int x, y, z;

    Koordinate (int _x, int _y, int _z) {
        x = _x;
        y = _y;
        z = _z;
    }

    Koordinate (const Koordinate& a) {
        x = a.x;
        y = a.y;
        z = a.z;
    }

    Koordinate() {
        x = 0;
        y = 0;
        z = 0;
    }

};


Koordinate sestej(Koordinate a, Koordinate b) {
    Koordinate r = Koordinate(a);
    r.x += b.x;
    r.y += b.y;
    r.z += b.z;
    return r;
}

bool prim(Koordinate a, Koordinate b) {
    return a.x == b.x && a.y == b.y && a.z == b.z;
}

Koordinate mnoziMinusEna(Koordinate a){
    Koordinate r = Koordinate(a);
    r.x *= -1;
    r.y *= -1;
    r.z *= -1;
    return r;
}


Koordinate smerX = Koordinate(1,0,0);
Koordinate smerY = Koordinate(0,1,0);
Koordinate smerZ = Koordinate(0,0,1);
Koordinate stoji = Koordinate(0,0,0);


struct Drone {
    Koordinate poz;
    Koordinate zacetna;
    Koordinate koncna;

    vector<Koordinate> poteze;

    Drone (Koordinate _zacetna, Koordinate _koncna) {
        poz = _zacetna;//Koordinate(_zacetna.x,_zacetna.y, _zacetna.z );
        zacetna = _zacetna;//Koordinate(_zacetna);
        koncna = _koncna;//Koordinate(_koncna);
        poteze = vector<Koordinate>();
    }

    bool is_complete_x() {
        return poz.x == koncna.x;
    }

    bool is_complete_y() {
        return poz.y == koncna.y;
    }

    bool is_complete_z() {
        return poz.z == koncna.z;
    }

    bool is_complete() {
        return is_complete_x() && is_complete_y() && is_complete_z();
    }

    Koordinate mozna_smer() {
        //cout << poteze.size() << endl;
        if (poteze.size() > 0) {
            //cout << "here2" << endl;
            Koordinate r = poteze.back();
            poteze.pop_back();
            return r;
        }

        if (!is_complete_x()) {
            if (koncna.x < poz.x) {
                return mnoziMinusEna(smerX);
            } 
            return smerX;
        }

        if (!is_complete_y()) {
            if (koncna.y < poz.y) {
                return mnoziMinusEna(smerY);
            } 
            return smerY;
        }

        if (!is_complete_z()) {
            if (koncna.z < poz.z) {
                return mnoziMinusEna(smerZ);
            } 
            return smerZ;
        }

        return stoji;
    }

};

Koordinate doloci_naslednjo_potezo(Koordinate a) {
    if (a.x == smerX.x) {
        return smerY;
    }
    if (a.y == smerY.y) {
        return smerZ;
    }
    if (a.z == smerZ.z) {
        return smerX;
    }

    return stoji;
}

int main() {

    int x1, y1, z1, x2, y2, z2;

    cin >> x1 >> y1 >> z1 >> x2 >> y2 >> z2;
    Koordinate k1 = Koordinate(x1,y1,z1);
    Koordinate k2 = Koordinate(x2,y2,z2);
    Drone d1 = Drone(k1, k2);

    cin >> x1 >> y1 >> z1 >> x2 >> y2 >> z2;
    Koordinate k3 = Koordinate(x1,y1,z1);
    Koordinate k4 = Koordinate(x2,y2,z2);
    Drone d2 = Drone(k3, k4);
    


    while (true) {
        printf("(%d %d %d) (%d %d %d)\n", d1.poz.x, d1.poz.y, d1.poz.z, d2.poz.x, d2.poz.y, d2.poz.z);        
        if (d1.is_complete() && d2.is_complete()) {
            break;
        }

        Koordinate smer_za_d1 = d1.mozna_smer();
        Koordinate smer_za_d2 = d2.mozna_smer();

        Koordinate naslednja_d1 = sestej(d1.poz, smer_za_d1);
        Koordinate naslednja_d2 = sestej(d2.poz, smer_za_d2);

        bool glava_v_glavo = prim(naslednja_d1, naslednja_d2);
        bool zamenjaj = prim(naslednja_d1, d2.poz) && prim(naslednja_d2, d1.poz);
        if (glava_v_glavo) {
            if(d1.is_complete()) {
                // D2 se premakne okoli
                Koordinate izmikajoca_smer = doloci_naslednjo_potezo(smer_za_d2);

                d2.poteze.push_back(izmikajoca_smer);
                d2.poteze.push_back(smer_za_d2);
                d2.poteze.push_back(mnoziMinusEna(izmikajoca_smer));
            } else if (d2.is_complete()){
                // D1 se premakne okoli
                Koordinate izmikajoca_smer = doloci_naslednjo_potezo(smer_za_d1);

                d1.poteze.push_back(izmikajoca_smer);
                d1.poteze.push_back(smer_za_d1);
                d1.poteze.push_back(mnoziMinusEna(izmikajoca_smer));
            } else {
                // D1 se ustavi

                d1.poteze.push_back(stoji);
                naslednja_d1 = sestej(mnoziMinusEna(smer_za_d1), naslednja_d1);
                d2.poteze.push_back(smer_za_d2);
            }
        }

        if (zamenjaj) {
            //cout << "here" << endl;
            Koordinate izmikajoca_smer_za_d1 = doloci_naslednjo_potezo(smer_za_d1);
            Koordinate izmikajoca_smer_za_d2 = mnoziMinusEna(izmikajoca_smer_za_d1);

            d1.poteze.push_back(izmikajoca_smer_za_d1);
            d1.poteze.push_back(smer_za_d1);
            d1.poteze.push_back(mnoziMinusEna(izmikajoca_smer_za_d1));
            //cout << d1.poteze.size() << endl;

            d2.poteze.push_back(izmikajoca_smer_za_d2);
            d2.poteze.push_back(smer_za_d2);
            d2.poteze.push_back(mnoziMinusEna(izmikajoca_smer_za_d2));
            naslednja_d1 = sestej(mnoziMinusEna(smer_za_d1), naslednja_d1);
            naslednja_d2 = sestej(mnoziMinusEna(smer_za_d2), naslednja_d2);

        }

        d1.poz = naslednja_d1;
        d2.poz = naslednja_d2;
    }
    

    return 0;
}