#151
drum
Oraşele Nordemos şi Suderim sunt separate de un munte foarte înalt. Inginerul Negrimon a fost desemnat să construiască un drum prin munte care să unească cele două oraşe. Harta care i s-a pus la dispoziţie descrie muntele ca o matrice cu N
linii şi M
coloane numerotate de la 1
la N
, respectiv de la 1
la M
. Un drum reprezintă o succesiune de elemente din matrice cu proprietatea că oricare două elemente consecutive sunt alăturate, pe linie sau pe coloană. Un drum uneşte oraşul Nordemos (linia 1
) şi oraşul Suderim (linia N
). Valorile din matrice reprezintă densităţile rocilor din munte în acele zone. Pentru fiecare drum posibil se poate calcula valoarea dmax
, egală cu densitatea maximă a rocilor pe care le traversează. Negrimon trebuie să construiască un drum pentru care valoarea dmax
este cea mai mică.
Ajută-l pe Negrimon să afle cea mai mică dintre densităţile dmax
corespunzătoare drumurilor care unesc Nordemos şi Suderim în condiţiile de mai sus.
Urmasii lui Moisil, Iasi, 2013
Problema | drum | Operații I/O |
![]() drum.in /drum.out
|
---|---|---|---|
Limita timp | 0.13 secunde | Limita memorie |
Total: 64 MB
/
Stivă 8 MB
|
Id soluție | #58088683 | Utilizator | |
Fișier | drum.cpp | Dimensiune | 2.36 KB |
Data încărcării | 13 Mai 2025, 15:17 | Scor / rezultat | Eroare de compilare |
drum.cpp:1:1: error: expected unqualified-id before string constant "#include <fstream>\n#define DMAX 1001\n#define INFILE \"drum.in\"\n#define OUTFILE \"drum.out\"\n\nusing namespace std ;\n\nifstream FIN (INFILE) ;\nofstream FOUT (OUTFILE) ;\n\nlong long int mat[DMAX][DMAX] ;\nint d1[4]={-1, 0, 1, 0}, d2[4]={0, 1, 0, -1} ;\nlong long int N, M, VMAX ;\nlong long int CX[DMAX * DMAX + 1], CY[DMAX * DMAX + 1] ;\n\nint Solve() ;\nvoid Read() ;\nvoid Path(int x, int y, int val) ;\nvoid GetXY(int& x, int& y, int pos) ;\n\nint main()\n{\n int i, ok1 ;\n Read() ;\n for (i = 1; i <= VMAX; ++ i)\n {\n ok1 = Solve() ;\n if (ok1)\n {\n FOUT << i << '\\n' ;\n return 0 ;\n }\n }\n\n FIN.close() ;\n FOUT.close() ;\n return 0 ;\n}\n\nvoid Read()\n{\n FIN >> N >> M >> VMAX ;\n}\n\nvoid GetXY(int& x, int& y, int pos)\n{\n x = pos / M ;\n if (pos % M)\n {\n ++ x ;\n }\n y = pos % M ;\n if (!y)\n {\n y = M ;\n }\n}\n\nint Solve()\n{\n int nr, i, pos, x, y, k, ok1, ok2 ;\n FIN >> nr ;\n for (i = 1; i <= nr; ++i)\n {\n FIN >> pos ;\n GetXY(x, y, pos) ;\n ok1 = ok2 = 0 ;\n\n mat[x][y] = 3 ;\n\n for (k = 0; k < 4; ++k)\n {\n if (mat[x+d1[k]][y+d2[k]] == 1)\n {\n ok1 = 1 ;\n mat[x][y] = 1 ;\n }\n if (mat[x+d1[k]][y+d2[k]] == 2)\n {\n ok2 = 2 ;\n mat[x][y] = 2 ;\n }\n }\n\n if (x == 1)\n {\n mat[x][y] = 1 ;\n ok1 = 1 ;\n }\n\n if (x == N)\n {\n mat[x][y] = 2 ;\n ok2 = 1 ;\n }\n\n if (ok1 && ok2)\n {\n return 1 ;\n }\n\n if (mat[x][y] != 3)\n {\n Path(x, y, mat[x][y]) ;\n }\n }\n return 0 ;\n}\n\nvoid Path(int x, int y, int val)\n{\n int k ;\n int st, en ;\n st = en = 1 ;\n CX[st] = x ;\n CY[st] = y ;\n while(st <= en)\n {\n x = CX[st] ;\n y = CY[st] ;\n ++st ;\n mat[x][y] = val ;\n for (k = 0; k < 4; ++k)\n {\n if (mat[x+d1[k]][y+d2[k]] == 3)\n {\n mat[x+d1[k]][y+d2[k]] = val ;\n ++en ;\n CX[en] = x + d1[k] ;\n CY[en] = y + d2[k] ;\n }\n }\n }\n}\n\n" ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema drum face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.