Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1480 Traseu3  (Citit de 1762 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Teodor94
Echipa infoarena
Nu mai tace
*****

Karma: 63
Deconectat Deconectat

Mesaje: 558



Vezi Profilul
« : Mai 23, 2014, 10:52:20 »

Aici puteti discuta despre problema Traseu3.
Memorat
Djok
Client obisnuit
**

Karma: 10
Deconectat Deconectat

Mesaje: 71



Vezi Profilul
« Răspunde #1 : Iulie 21, 2014, 14:40:28 »

Am trimis o sursă care află corect doar T, și am primit 0 puncte...
Presupun că nu se respectă condiția: Se acordă: 40% din punctaj pentru determinarea corectă a numărului T
Memorat
tudorv96
Strain


Karma: -6
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #2 : Iulie 21, 2014, 16:00:47 »

Am trimis o sursă care află corect doar T, și am primit 0 puncte...
Presupun că nu se respectă condiția: Se acordă: 40% din punctaj pentru determinarea corectă a numărului T

Da, aici ai dreptate, am uitat sa pun evaluator la problema. Multumesc pentru ca ai postat.  Smile

LE: Un evaluator a fost adaugat iar sursele au fost reevaluate. Imi cer scuze pentru neplacerile create.
« Ultima modificare: Iulie 21, 2014, 16:27:23 de către Tudor Varan » Memorat
cata00
Strain


Karma: 24
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #3 : Martie 30, 2015, 11:57:05 »

În secțiunile Date de intrare și Date de ieșire, fișierele sunt denumite incorect traseu.in și traseu.out. Ar trebui corectat în traseu3.in și traseu3.out. Sper să vă ajute.
Memorat
DeehoroEjkoli
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #4 : Martie 18, 2016, 12:57:31 »

Cod:
[#include <fstream>
#include <queue>
#include <cstring>
#define nmax 105
using namespace std;
ifstream fin("traseu3.in");
ofstream fout("traseu3.out");
 
struct rooms {
    short storey, line, column;
};
 
queue < rooms > tail;
 
int building[nmax][nmax][nmax], n, m;
 
bool was_here[nmax][nmax][nmax], sec_was_here[nmax][nmax][nmax];
 
int d_f[6] = {-1, 0, 0, 0, 0, 1};
int d_l[6] = {0, -1, 0, 0, 1, 0};
int d_c[6] = {0, 0, -1, 1, 0, 0};
 
bool is_ok(int x, int y, int z) {
    if (x < 1 or y < 1 or z < 1 or x > n or y > n or z > n or building[x][y][z] == -1 or was_here[x][y][z] == true)
        return false;
    return true;
}
 
void main_program() {
    while (!tail.empty()) {
        short storey = tail.front().storey;
        short line = tail.front().line;
        short column = tail.front().column;
        tail.pop();
        for (int k = 0; k < 6; ++k)
            if (is_ok(storey + d_f[k], line + d_l[k], column + d_c[k])) {
                building[storey + d_f[k]][line + d_l[k]][column + d_c[k]] = building[storey][line][column] + 1;
                was_here[storey + d_f[k]][line + d_l[k]][column + d_c[k]] = true;
                rooms stuff = {storey + d_f[k], line + d_l[k], column + d_c[k]};
                tail.push(stuff);
            }
    }
}
 
bool is_good(int x, int y, int z) {
    if (x < 1 or y < 1 or z < 1 or x > n or y > n or z > n or was_here[x][y][z] == false or sec_was_here[x][y][z] == true)
        return false;
    return true;
}
 
void second_main_program(int x, int y, int z, int stop_x, int stop_y, int stop_z) {
    while (!tail.empty()) {
        short storey = tail.front().storey;
        short line = tail.front().line;
        short column = tail.front().column;
        tail.pop();
        for (int k = 0; k < 6; ++k)
            if (is_ok(storey + d_f[k], line + d_l[k], column + d_c[k]))
                if (building[storey + d_f[k]][line + d_l[k]][column + d_c[k]] = building[storey][line][column] - 1) {
                    was_here[storey + d_f[k]][line + d_l[k]][column + d_c[k]] = true;
                    rooms stuff = {storey + d_f[k], line + d_l[k], column + d_c[k]};
                    tail.push(stuff);
                }
    }
    rooms stuff = {x, y, z};
    tail.push(stuff);
    fout << x << " " << y << " " << z << "\n";
    sec_was_here[x][y][z] = true;
    while (!tail.empty()) {
        short storey = tail.front().storey;
        short line = tail.front().line;
        short column = tail.front().column;
        tail.pop();
        for (int k = 0; k < 6; ++k)
            if (is_good(storey + d_f[k], line + d_l[k], column + d_c[k]))
                if (building[storey + d_f[k]][line + d_l[k]][column + d_c[k]] == building[storey][line][column] + 1) {
                    sec_was_here[storey + d_f[k]][line + d_l[k]][column + d_c[k]] = true;
                    rooms stuff = {storey + d_f[k], line + d_l[k], column + d_c[k]};
                    tail.push(stuff);
                    fout << storey + d_f[k] << " " << line + d_l[k] << " " << column + d_c[k] << "\n";
                    if (storey + d_f[k] == stop_x and line + d_l[k] == stop_y and column + d_c[k] == stop_z)
                        return;
                    break;
                }
    }
}
 
void read_input() {
    fin >> n >> m;
    int floor_m, line_m, column_m, floor_c, line_c, column_c;
    fin >> floor_m >> line_m >> column_m >> floor_c >> line_c >> column_c;
    rooms stuff = {floor_m, line_m, column_m};
    tail.push(stuff);
    was_here[floor_m][line_m][column_m] = true;
    building[floor_m][line_m][column_m] = 1;
    for (int i = 1; i <= m; ++i) {
        int x, y, z;
        fin >> x >> y >> z;
        building[x][y][z] = -1;
    }
    main_program();
    fout << building[floor_c][line_c][column_c] << "\n";
    stuff = {floor_c, line_c, column_c};
    tail.push(stuff);
    memset(was_here, false, sizeof(was_here));
    was_here[floor_c][line_c][column_c] = true;
    second_main_program(floor_m, line_m, column_m, floor_c, line_c, column_c);
}
 
int main()
{
    read_input();
    return 0;
}]

Iau 90 cu TLE pe celelalte.
« Ultima modificare: Martie 18, 2016, 17:10:27 de către Pop Darian » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines