Mușuroi

Time limit: 0.4s Memory limit: 64MB Input: musuroi.in Output: musuroi.out

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.

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;
  • (lin1lin-1, col+1col+1), dacă săgeata este 1;
  • (lin1lin-1, colcol), dacă săgeata este 2;
  • (lin1lin-1, col1col-1), dacă săgeata este 3;
  • (linlin, col1col-1), dacă săgeata este 4;
  • (lin+1lin+1, col1col-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 (1iQ1 \leq i \leq Q).

Restricții și precizări

  • 2N,M1 0002 \leq N, M \leq 1 \ 000
  • 1Q100 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.
  • 1K1 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.
# Scor Restricții
1 11 K=1,2N,M,Q100K=1, 2 \leq N, M, Q \leq 100
2 37 K=1K=1, fără restricții suplimentare
3 9 1<K7,2N,M,Q1001<K \leq 7, 2 \leq N, M, Q \leq 100
4 43 K>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).

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