Harta digitală a câmpului de luptă este memorată într-un tablou bidimensional cu linii, coloane și elemente din mulțimea {}. Valoarea reprezintă o poziție liberă, iar valoarea reprezintă o poziție ocupată de un obstacol. În fiecare element aflat pe conturul tabloului, adică pe prima linie, prima coloana, ultima linie și ultima coloană, se află obiective inamice. Pe conturul tabloului se găsesc numai elemente nule.
În interiorul tabloului (elementele care nu se află pe contur), într-o poziție liberă, trebuie plasat un soldat. Scopul său este să anihileze cât mai multe obiective inamice. Din păcate, el deține o armă laser cu care poate executa doar un singur atac. La lansarea atacului, se trimit raze, câte una în fiecare dintre cele direcții diagonale. O rază poate merge până la întâlnirea unui obstacol (în acest caz se oprește și nu va avea nici un efect) sau până ajunge pe contur (în acest caz distruge obiectivul inamic respectiv).
Cerință
Scrieți un program care determină numărul maxim de obiective inamice, notat cu , ce pot fi distruse în urma unui atac, precum și numărul pozițiilor în care putem plasa soldatul pentru a distruge obiective inamice.
Date de intrare
Fișierul de intrare raze.in
conține pe prima linie numărul natural , reprezentând numărul seturilor de date de intrare. Pentru fiecare set de date de intrare în fișierul de intrare pe prima linie a setului se află numerele naturale și , separate printr-un spațiu, reprezentând numărul liniilor, respectiv numărul coloanelor tabloului; pe următoarele linii ale setului de date se află câte M numere naturale din mulțimea {}, separate prin câte un spațiu, reprezentând forma digitală a hărții câmpului de luptă.
Date de ieșire
Fișierul de ieșire raze.out
va conține linii, corespunzătoare celor seturi de date de intrare. Pe fiecare linie se vor tipări două numere naturale și , separate printr-un spațiu, reprezentând numărul maxim de obiective inamice distruse în atac, respectiv numărul pozițiilor din care se pot distruge obiective inamice.
Restricții și precizări
- Se garantează că există cel puțin un obiectiv inamic ce poate fi anihilat pentru fiecare set de date de intrare.
Exemplu
raze.in
2
4 6
0 0 0 0 0 0
0 0 1 1 1 0
0 0 0 0 0 0
0 0 0 0 0 0
4 7
0 0 0 0 0 0 0
0 1 1 1 1 1 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
raze.out
4 1
3 2
Explicație
În fișier se găsesc două seturi de date de intrare.
În primul set de date se pot anihila maximum obiective inamice, poziționând soldatul în linia și coloana .
În al doilea set de date se pot anihila maximum obiective inamice, poziționând soldatul în elementul de pe linia și coloana sau în elementul din linia și coloana .