ConcursC++17

blind

Fie o matrice de dimensiuni N×MN \times M care conține numai valorile 00 și 11. Căsuțele marcate cu 00 sunt inaccesibile, în timp ce căsuțele marcate cu 11 sunt accesibile.

Gimi se va afla inițial într-o căsuță marcată cu 11 din această matrice, poziția ei nefiind însă cunoscută nouă. Lui Gimi îi putem da instrucțiuni de tipul: deplasează-te în căsuța (xd,yd)(x_d, y_d). Regulile sunt următoarele:

  • Gimi se poate deplasa numai în căsuțe marcate cu 11.
  • Gimi se poate deplasa numai în căsuțe vecine cu cea în care se află. Căsuțele vecine cu (x,y)(x, y) sunt (cât timp sunt în matrice): (x−1,y)(x - 1, y), (x,y+1)(x, y + 1), (x+1,y)(x + 1, y) și (x,y−1)(x, y - 1).

Dacă Gimi poate respecta toate regulile, atunci acesta se va deplasa în căsuța (xd,yd)(x_d, y_d). Altfel, va rămâne pe loc.

Cerință

Scrieți un program care, cunoscând NN și MM, respectiv matricea, determină:

Cerința 1. O serie de instrucțiuni pe care, dacă Gimi o urmărește, indiferent de poziția lui inițială, ne va garanta faptul că va trece prin căsuța (xt,yt)(x_t, y_t) (marcată cu 11).

Cerința 2. O serie de instrucțiuni pe care, dacă Gimi o urmărește, indiferent de poziția lui inițială, ne va garanta faptul că va trece prin toate celelalte căsuțe marcate cu 11.

Cerința 3. Cel mai mic număr PP astfel încât, primind o serie de QQ instrucțiuni pe care, dacă Gimi o urmărește, indiferent de poziția lui de start, ne va garanta faptul că va trece prin toate celelalte căsuțe marcate cu 11, fără să fie necesară executarea instrucțiunilor de la P+1P + 1 la QQ.

Date de intrare

Fișierul de intrare blind.in conține pe prima linie cerința CC care trebuie rezolvată, iar pe a doua linie două numere NN și MM, separate printr-un spațiu. Fiecare dintre următoarele NN linii conțin MM numere (care au valori numai de 00 și 11), separate prin câte un spațiu.

Dacă C=1C = 1, următoarea linie va conține două numere xtx_t și yty_t, separate printr-un spațiu, reprezentând coordonatele căsuței prin care Gimi va trebui să treacă.

Dacă C=3C = 3, următoarea linie va conține un număr natural QQ, reprezentând numărul de instrucțiuni. Următoarele QQ linii vor conține câte două numere naturale xx și yy, separate printr-un spațiu, reprezentând instrucțiunile.

Date de ieșire

Fișierul de ieșire blind.out va conține pentru C=1C = 1 și C=2C = 2 seria de instrucțiuni, în ordinea executării lor. Pe fiecare linie se vor afla câte două numere (x,y)(x, y). Pentru C=3C = 3 fișierul va conține numărul minim de instrucțiuni cerut.

Punctarea cerințelor 1 și 2

Punctajul obținut pe fiecare test depinde de numărul de instrucțiuni afișate.

Notăm cu KK numărul de căsuțe de 11 din matrice, iar cu LiL_i numărul de instrucțiuni afișate. Fie Lmax⁡=10 000 000L_{\max} = 10 \ 000 \ 000, iar T=KT = K dacă C=1C = 1, sau T=3KT = 3K dacă C=2C = 2. Dacă Li>Lmax⁡L_i > L_{\max}, atunci punctajul obținut este 00. Pentru punctaj maxim, Li<TL_i < T.

Se va acorda punctaj parțial dacă nu se respectă condițiile de mai sus. Se pot obține de la 10%10\% până la 90%90\% din punctaj. Procentajul se calculează după următoarea formulă:

90−80×(log⁡10(Li)−log⁡10(T)log⁡10(Lmax⁡)−log⁡10(T))0.75\displaystyle 90 - 80 \times \left(\frac{\log_{10}(L_i) - \log_{10}(T)}{\log_{10}(L_{\max}) - \log_{10}(T)}\right)^{0.75}

Restricții și precizări

  • C∈{1,2,3}C \in \{1, 2, 3\}
  • 1≤N,M≤5001 \leq N, M \leq 500; Liniile și coloanele sunt numerotate începând cu 11.
  • 1≤K≤20 0001 \leq K \leq 20 \ 000
  • Pentru cerința 3, 1≤Q≤2 500 0001 \leq Q \leq 2 \ 500 \ 000.
  • Se garantează că, printr-un șir de instrucțiuni, se poate ajunge din orice căsuță marcată cu 11 în oricare alta.
  • Dacă Gimi se află inițial în căsuța (x,y)(x, y), atunci se consideră că Gimi a trecut deja prin acea căsuță.
#PunctajRestricții
15C=1C = 1, N=1N = 1 și K≠N⋅MK \neq N \cdot M
26C=1C = 1, K=N⋅MK = N \cdot M
38C=1C = 1, 2≤N,M≤602 \leq N, M \leq 60, 1≤K≤1001 \leq K \leq 100 și K≠N⋅MK \neq N \cdot M
410C=1C = 1, 60<N,M≤50060 < N, M \leq 500, 1≤K≤20 0001 \leq K \leq 20 \ 000 și K≠N⋅MK \neq N \cdot M
56C=2C = 2, N=1N = 1 și K≠N⋅MK \neq N \cdot M
66C=2C = 2, K=N⋅MK = N \cdot M
76C=2C = 2, 2≤N,M≤602 \leq N, M \leq 60, 1≤K≤1001 \leq K \leq 100 și K≠N⋅MK \neq N \cdot M
814C=2C = 2, 60<N,M≤50060 < N, M \leq 500, 1≤K≤20 0001 \leq K \leq 20 \ 000 și K≠N⋅MK \neq N \cdot M
95C=3C = 3, 1≤K≤1001 \leq K \leq 100, 1≤Q≤10 0001 \leq Q \leq 10 \ 000
105C=3C = 3, 100<K≤1 000100 < K \leq 1 \ 000, 1≤Q≤100 0001 \leq Q \leq 100 \ 000
115C=3C = 3, 1 000<K≤5 0001 \ 000 < K \leq 5 \ 000, 1≤Q≤500 0001 \leq Q \leq 500 \ 000
126C=3C = 3, 1 000<K≤5 0001 \ 000 < K \leq 5 \ 000, 500 000≤Q≤2 500 000500 \ 000 \leq Q \leq 2 \ 500 \ 000
137C=3C = 3, 5 000<K≤8 0005 \ 000 < K \leq 8 \ 000
1411C=3C = 3, 8 000<K≤20 0008 \ 000 < K \leq 20 \ 000

Exemplul 1

blind.in

1
2 3
1 1 0
0 1 1
2 2

blind.out

1 2
2 2

Explicație

Pentru primul exemplu, analizăm fiecare poziție de start:

  • (1,1)→(1,2)→(2,2)(1, 1) \to (1, 2) \to (2, 2)
  • (1,2)→(1,2)→(2,2)(1, 2) \to (1, 2) \to (2, 2)
  • (2,2)→(1,2)→(2,2)(2, 2) \to (1, 2) \to (2, 2)
  • (2,3)→(2,3)→(2,2)(2, 3) \to (2, 3) \to (2, 2)

Toate traseele trec prin căsuța (2,2)(2, 2) cel puțin odată. De precizat că, dacă Gimi s-ar fi aflat inițial în căsuța (2,2)(2, 2), atunci se consideră ca el deja a trecut prin acea căsuță. De asemenea, se observă că atunci când Gimi se află în celula (2,3)(2, 3) și primește instrucțiunea de a se deplasa în celula (1,2)(1, 2), acesta practic stă pe loc.

Exemplul 2

blind.in

2
2 3
1 1 0
0 1 1

blind.out

1 2
2 2
2 3
2 2
1 2
1 1

Explicație

Pentru al doilea exemplu, analizăm fiecare poziție de start:

  • (1,1)‾→(1,2)‾→(2,2)‾→(2,3)‾→(2,2)→(1,2)→(1,1)\underline{(1, 1)} \to \underline{(1, 2)} \to \underline{(2, 2)} \to \underline{(2, 3)} \to (2, 2) \to (1, 2) \to (1, 1)
  • (1,2)‾→(1,2)→(2,2)‾→(2,3)‾→(2,2)→(1,2)→(1,1)‾\underline{(1, 2)} \to (1, 2) \to \underline{(2, 2)} \to \underline{(2, 3)} \to (2, 2) \to (1, 2) \to \underline{(1, 1)}
  • (2,2)‾→(1,2)‾→(2,2)→(2,3)‾→(2,2)→(1,2)→(1,1)‾\underline{(2, 2)} \to \underline{(1, 2)} \to (2, 2) \to \underline{(2, 3)} \to (2, 2) \to (1, 2) \to \underline{(1, 1)}
  • (2,3)‾→(2,3)→(2,2)‾→(2,3)→(2,2)→(1,2)‾→(1,1)‾\underline{(2, 3)} \to (2, 3) \to \underline{(2, 2)} \to (2, 3) \to (2, 2) \to \underline{(1, 2)} \to \underline{(1, 1)}

Toate traseele trec prin fiecare căsuță marcată cu 11 cel puțin odată. Pentru fiecare traseu, apar subliniate căsuțele prin care Gimi trece pentru prima oară.

Exemplul 3

blind.in

3
2 3
1 1 0
0 1 1
7
1 2
2 2
2 3
2 2
1 2
1 1
1 2

blind.out

6

Explicație

Pentru al treilea exemplu, primele 66 instrucțiuni ne garantează faptul că, indiferent de poziția de start a lui Gimi, el va vizita toate celelalte căsuțe. Efectuarea celei de-a 77 instrucțiuni nu este necesară.

Sursă și autori

ONI 2026, clasele 10. Ioan-Cristian Pop.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑