blind

Time limit: 0.9s Memory limit: 128MB Input: blind.in Output: blind.out

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): (x1,y)(x - 1, y), (x,y+1)(x, y + 1), (x+1,y)(x + 1, y) și (x,y1)(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>LmaxL_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ă:

9080×(log10(Li)log10(T)log10(Lmax)log10(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\}
  • 1N,M5001 \leq N, M \leq 500; Liniile și coloanele sunt numerotate începând cu 11.
  • 1K20 0001 \leq K \leq 20 \ 000
  • Pentru cerința 3, 1Q2 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ță.
# Punctaj Restricții
1 5 C=1C = 1, N=1N = 1 și KNMK \neq N \cdot M
2 6 C=1C = 1, K=NMK = N \cdot M
3 8 C=1C = 1, 2N,M602 \leq N, M \leq 60, 1K1001 \leq K \leq 100 și KNMK \neq N \cdot M
4 10 C=1C = 1, 60<N,M50060 < N, M \leq 500, 1K20 0001 \leq K \leq 20 \ 000 și KNMK \neq N \cdot M
5 6 C=2C = 2, N=1N = 1 și KNMK \neq N \cdot M
6 6 C=2C = 2, K=NMK = N \cdot M
7 6 C=2C = 2, 2N,M602 \leq N, M \leq 60, 1K1001 \leq K \leq 100 și KNMK \neq N \cdot M
8 14 C=2C = 2, 60<N,M50060 < N, M \leq 500, 1K20 0001 \leq K \leq 20 \ 000 și KNMK \neq N \cdot M
9 5 C=3C = 3, 1K1001 \leq K \leq 100, 1Q10 0001 \leq Q \leq 10 \ 000
10 5 C=3C = 3, 100<K1 000100 < K \leq 1 \ 000, 1Q100 0001 \leq Q \leq 100 \ 000
11 5 C=3C = 3, 1 000<K5 0001 \ 000 < K \leq 5 \ 000, 1Q500 0001 \leq Q \leq 500 \ 000
12 6 C=3C = 3, 1 000<K5 0001 \ 000 < K \leq 5 \ 000, 500 000Q2 500 000500 \ 000 \leq Q \leq 2 \ 500 \ 000
13 7 C=3C = 3, 5 000<K8 0005 \ 000 < K \leq 8 \ 000
14 11 C=3C = 3, 8 000<K20 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ă.

Log in or sign up to be able to send submissions!