Se consideră un tablou bidimensional format din N linii și N coloane, care conține celule libere codificate cu valoarea 0 și celule blocate, codificate cu valoarea 1. M jucători sunt poziționați în celule diferite ale matricei. Un jucător poate fi poziționat într-o celulă liberă sau într-o celulă blocată. Începând cu momentul t0 = 0, la fiecare moment întreg de timp t, fiecare jucător colorează celulele libere aflate la distanța t de poziția în care se află.
Definim distanța dintre două celule (i1, j1) și (i2, j2) ca fiind egală cu max(|i1 - i2|, |j1 - j2|), unde i1 și i2 corespund indicilor liniilor pe care se află cele două celule, iar j1 și j2 corespund coloanelor.
Cerința
Scrieți un program care citește un număr natural N, valorile matricei și pozițiile inițiale ale jucătorilor și afișează la ieșire răspunsul la Q întrebări de forma: “Care este primul moment de timp după care avem cel puțin P celule colorate în matrice?”. În cazul în care pentru o întrebare nu se vor putea colora P celule libere (după oricât de mult timp), se va afișa ca răspuns pentru acea întrebare valoarea -1.
Date de intrare
Prima linie conține numărul N, iar fiecare din următoarele N linii, câte N numere separate prin câte un spațiu, corespunzând tipului celulelor de pe linia corespunzătoare din matrice.
Linia N + 2 conține numărul de jucători M, iar fiecare din următoarele M linii câte două numere naturale, separate prin spațiu, reprezentând numărul liniei, respectiv, numărul coloanei în care se află fiecare din cei M jucători.
Linia M + N + 3 conține numărul natural Q, reprezentând numărul de întrebări, iar ultima linie conține Q numere naturale separate prin câte un spațiu, reprezentând valorile lui P, pentru fiecare dintre cele Q interogări.
Întrucât volumul datelor de intrare este foarte mare, vă recomandăm, în cazul în care folosiți pentru citire biblioteca iostream din standardul C++, să adăaugați la începutul funcției main următoarele instrucțiuni:
std :: ios_base :: sync_with_stdio(false); std :: cin.tie(0);
Date de ieșire
Ieșirea constă într-o singură linie, care va conține Q numere, separate prin câte un spațiu, corespunzătoare răspunsurilor la întrebările date, în ordinea în care au fost citite.
Restricții și precizări
3 ≤ N ≤ 1500- \( 1 ≤ M, Q ≤ {N}^{2} \)
- \( 1 ≤ P ≤ {10}^{9} \)
- liniile și coloanele sunt indexate începând cu
1.
Subtask 1(12 puncte)
3 ≤ N ≤ 20
Subtask 2(33 de puncte)
1 ≤ M ≤ 10
Subtask 3(21 de puncte)
3 ≤ N ≤ 600
Subtask 4(34 de puncte)
- fără restricții suplimentare.
Exemplu:
Intrare
8 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 2 3 3 6 6 3 35 16 1000
Ieșire
2 1 -1
Explicație
După momentul de timp t = 0, se va colora doar celula (3, 3). (Total: 1)
După momentul de timp t = 1, se vor mai colora în plus celulele (2, 2), (2, 3), (2, 4), (3, 2), (3, 4), (4, 2), (4, 3), (4, 4), (5, 6), (5, 7), (6, 5), (6, 7), (7, 5), (7, 6), (7, 7). (Total: 16)
După momentul de timp t = 2, vom avea în total colorate 40 de celule.
Pentru prima interogare, primul moment de timp după care avem cel puțin 35 de celule colorate este 2.
Analog, pentru a doua interogare, răspunsul este 1.
Nu se vor putea colora niciodată 1000 de celule, răspunsul fiind -1.