ConcursC++17

Mușuroi

Un mușuroi format din mai multe celule este reprezentat ca o matrice cu NN linii, numerotate de la 1 la NN, și MM coloane, numerotate de la 1 la MM, fiecare element al matricii corespunzând unei celule. Poziţia unei celule din mușuroi este identificată prin linia şi coloana pe care se află. În fiecare celulă a mușuroiului este desenată o săgeată, care indică sensul în care o furnică aflată în poziţia respectivă se va deplasa. Săgețile sunt codificate cu numere de la 00 la 77.

Figura 1 din enunțul original al problemei Mușuroi.Figura 1 din enunțul original al problemei Mușuroi.Mărește schema ↗

Dacă furnica se află în celula (linlin, colcol) la momentul tt, atunci la momentul t+1t+1 ea va ajunge în poziţia:

  • (linlin, col+1col+1), dacă săgeata este 0;
  • (lin−1lin-1, col+1col+1), dacă săgeata este 1;
  • (lin−1lin-1, colcol), dacă săgeata este 2;
  • (lin−1lin-1, col−1col-1), dacă săgeata este 3;
  • (linlin, col−1col-1), dacă săgeata este 4;
  • (lin+1lin+1, col−1col-1), dacă săgeata este 5;
  • (lin+1lin+1, colcol), dacă săgeata este 6;
  • (lin+1lin+1, col+1col+1), dacă săgeata este 7.

În figura alăturată sunt ilustrate săgeţile, fiind indicată poziţia în care ajunge furnica pentru fiecare dintre ele.

Cerință

Cunoscând reprezentarea muşuroiului, scrieţi un program care să răspundă la QQ întrebări de forma linAlin_A colAcol_A linBlin_B colBol_B KK, cu semnificația “Dacă o furnică pornește de la celula (linAlin_A, colAcol_A) la momentul de timp t=0t=0, la ce moment de timp va ajunge a KK-a oară în poziţia (linBlin_B, colBcol_B)?”. Se garantează că furnica poate trece de cel puțin KK ori prin celula (linBlin_B, colBcol_B) dacă pornește din celula (linAlin_A, colAcol_A).

Date de intrare

Fișierul de intrare musuroi.in conţine pe prima linie numerele naturale NN și MM cu semnificația din enunț. Pe următoarele NN linii se află câte MM numere cuprinse între 0 și 7, ce reprezintă săgețile din fiecare celulă a matricii. Pe linia N+2N+2 se află numărul natural QQ, reprezentând numărul de întrebări, iar pe următoarele QQ linii se află cele QQ întrebări, câte o întrebare pe o linie, în forma descrisă mai sus. Valorile scrise pe aceeaşi linie sunt separate prin câte un spaţiu.

Date de ieșire

Fișierul de ieșire musuroi.out conține QQ linii, pe linia ii aflându-se un număr ce reprezintă răspunsul pentru cea de a ii-a întrebare din fişierul de intrare (1≤i≤Q1 \leq i \leq Q).

Restricții și precizări

  • 2≤N,M≤1 0002 \leq N, M \leq 1 \ 000
  • 1≤Q≤100 0001 \leq Q \leq 100 \ 000
  • În întrebările pentru care K=1K=1 poziţiile (linAlin_A, colAcol_A) şi (linBlin_B, colBcol_B) pot să coincidă, caz în care răspunsul este 0.
  • 1≤K≤1 000 000 0001 \leq K \leq 1 \ 000 \ 000 \ 000
  • Se garantează că furnica, deplasându-se în sensul săgeţilor, va rămâne în muşuroi.
#ScorRestricții
111K=1,2≤N,M,Q≤100K=1, 2 \leq N, M, Q \leq 100
237K=1K=1, fără restricții suplimentare
391<K≤7,2≤N,M,Q≤1001<K \leq 7, 2 \leq N, M, Q \leq 100
443K>1K>1, fără restricții suplimentare

Exemplul 1

musuroi.in

6 6
7 6 4 0 0 6
0 5 2 0 3 4
2 5 0 5 2 6
0 7 5 0 6 3
6 1 7 2 0 6
0 0 0 0 2 4
2
2 4 2 6 1
4 2 6 6 1

musuroi.out

5
6

Explicație

Prima întrebare: furnica pleacă la momentul t=0t=0 din poziţia (2,4)(2,4). Traseul furnicii este:
(2,4)→(2,5)→(1,4)→(1,5)→(1,6)→(2,6)(2,4) \rightarrow (2,5) \rightarrow (1,4) \rightarrow (1,5) \rightarrow (1,6) \rightarrow (2,6). La momentul t=5t=5 a ajuns la destinaţie, în poziţia (2,6)(2,6) pentru prima dată (K=1K=1).

A doua întrebare: furnica pleacă la momentul t=0t=0 din poziţia (4,2)(4,2). Traseul furnicii este:
(4,2)→(5,3)→(6,4)→(6,5)→(5,5)→(5,6)→(6,6)(4,2) \rightarrow (5,3) \rightarrow (6,4) \rightarrow (6,5) \rightarrow (5,5) \rightarrow (5,6) \rightarrow (6,6). La momentul t=6t=6 a ajuns la destinaţie, în poziţia (6,6)(6,6) pentru prima dată (K=1K=1).

Exemplul 2

musuroi.in

6 6
7 6 4 0 0 6
0 5 2 0 3 4
2 5 0 5 2 6
0 7 5 0 6 3
6 1 7 2 0 6
0 0 0 0 2 4
2
2 4 2 6 3
4 2 6 6 5

musuroi.out

15
22

Explicație

Prima întrebare: furnica pleacă la momentul t=0t=0 din poziţia (2,4)(2,4). Traseul furnicii este:
(2,4)→(2,5)→(1,4)→(1,5)→(1,6)→(2,6)→(2,5)→(1,4)→(1,5)→(1,6)→(2,6)→(2,5)→(1,4)→(1,5)→(1,6)→(2,6)(2,4) \rightarrow (2,5) \rightarrow (1,4) \rightarrow (1,5) \rightarrow (1,6) \rightarrow (2,6) \rightarrow (2,5) \rightarrow (1,4) \rightarrow (1,5) \rightarrow (1,6) \rightarrow (2,6) \rightarrow (2,5) \rightarrow (1,4) \rightarrow (1,5) \rightarrow (1,6) \rightarrow (2,6). La momentul t=15t=15 a ajuns la destinaţie, în poziţia (2,6)(2,6) pentru a treia oară (K=3K=3).

A doua întrebare: furnica pleacă la momentul t=0t=0 din poziţia (4,2)(4,2). Traseul furnicii este:
(4,2)→(5,3)→(6,4)→(6,5)→(5,5)→(5,6)→(6,6)→(6,5)→(5,5)→(5,6)→(6,6)→(6,5)→(5,5)→(5,6)→(6,6)→(6,5)→(5,5)→(5,6)→(6,6)→(6,5)→(5,5)→(5,6)→(6,6)(4,2) \rightarrow (5,3) \rightarrow (6,4) \rightarrow (6,5) \rightarrow (5,5) \rightarrow (5,6) \rightarrow (6,6) \rightarrow (6,5) \rightarrow (5,5) \rightarrow (5,6) \rightarrow (6,6) \rightarrow (6,5) \rightarrow (5,5) \rightarrow (5,6) \rightarrow (6,6) \rightarrow (6,5) \rightarrow (5,5) \rightarrow (5,6) \rightarrow (6,6) \rightarrow (6,5) \rightarrow (5,5) \rightarrow (5,6) \rightarrow (6,6). La momentul t=22t=22 a ajuns la destinaţie, în poziţia (6,6)(6,6) pentru a cincea oară (K=5K=5).

Sursă și autori

ONI 2025, clasele 8. Andrei Boacă.

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 ↑