logic

Time limit: 0.05s Memory limit: 4MB Input: logic.in Output: logic.out

Într-o zi a venit la mine un coleg din clasa a X-a şi mi-a propus un joc de logică. Mi-a arătat următoarea figură:

Pe ea am numerotat segmentele, pentru a fi mai clară noţiunea de segment. Eu am la dispoziţie un creion care se află pe hârtie în zona exterioară şi trebuie să trasez curbe pe foaie, fără să ridic creionul, astfel încât să trec prin toate segmentele (fără extremităţi) exact o dată. La sfârşit trebuie să mă aflu tot în exterior. Liniile(curbele) mele se pot intersecta.
Am început şi am încercat de mai multe ori, dar n-am reuşit.

Acum, când am mai crescut mi-am demostrat că nu se poate, dar am văzut că pentru alte figuri se poate. De exemplu aceasta:

Eu m-am prins de ce uneori merge şi alteori nu, dar vreau să văd dacă voi puteţi să vă prindeţi. De aceea o să vă dau câteva figuri şi pentru fiecare trebuie să răspundeţi cu DA sau NU, dacă se poate sau nu trasa o curbă de tipul descris mai sus.

Cerinţă

Scrieţi un program care răspunde cu DA sau NU pentru figurile propuse de mine.

Date de intrare

Fişierul de intrare logic.in are următoarea structură:

  • pe prima linie se află numărul TT de figuri
  • pe următoarele TT grupuri de linii se află datele celor TT figuri, după cum urmează:
  • pe prima linie a grupului se află valoarea lui NN reprezentând numărul de linii şi de coloane din matrice.
  • pe următoarele NN linii se află câte NN numere separate printr-un spaţiu (numere întregi între 00 şi 255255 inclusiv), reprezentând elementele matricei.

Această matrice codifică figura astfel :

Definim o zonă ca fiind o parte continuă a matricei care conţine acelaşi număr şi este aria maximă cu această proprietate. Altfel spus, două căsuţe alăturate (care diferă la o singură coordonată printr-o unitate) care conţin acelaşi număr, se lipesc. Astfel, în interiorul zonei nu vor exista segmente. La aceste zone se mai adaugă şi exteriorul matricei ca fiind o nouă zonă. În matrice pot fi zone cu acelaşi număr, dar care nu au legătură şi se consideră două zone diferite.

Segmentele sunt segmente de dreaptă care separă două zone şi sunt maxime ca lungime (adică nu putem considera două segmente unul în prelungirea celuilalt, în loc de unul singur). De exemplu, figura definită prin:

3
1 1 2
1 2 2
1 1 2

arată ca în desenul de mai jos (am numerotat şi segmentele):

Se vede din figură că între zona 11 şi 22 există 55 segmente. Între 11 şi exterior 33 segmente, iar între 22 şi exterior tot 33 segmente. De remarcat că segmentul 1010 este compus din 33 segmente mici, dar noi îl considerăm unul singur, conform definiţiei.

Date de ieșire

În fişierul logic.out se vor scrie TT linii, corespunzătoare fiecărui test. Pe fiecare linie va fi scris DA sau NU în funcţie de testul respectiv, dacă se poate trasa o linie de tipul cerut sau nu.

Restricții și precizări

  • 1T101 \leq T \leq 10;
  • 1N1001 \leq N \leq 100;

Exemplu

logic.in

2				
2				
1 2
3 4
4
1 1 2 2
1 1 2 2
3 4 4 1
3 4 4 1

logic.out

DA
NU

Explicație

Cele două figuri sunt primele 22 exemple.

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