Polish version    English version  
  Historia OI -> IV OI 1996/1997 -> Zadania


 Aktualności
 O olimpiadzie
 Komitety
 XVIII OI 2010/2011
 Historia OI
XVII OI 2009/2010
XVI OI 2008/2009
XV OI 2007/2008
XIV OI 2006/2007
XIII OI 2005/2006
XII OI 2004/2005
XI OI 2003/2004
X OI 2002/2003
IX OI 2001/2002
VIII OI 2000/2001
VII OI 1999/2000
VI OI 1998/1999
V OI 1997/1998
IV OI 1996/1997
Wyniki III etapu
Wyniki II etapu
Wyniki I etapu
Zadania
Regulamin
Zasady organizacji
Wskazówki
Terminarz
III OI 1995/1996
II OI 1994/1995
I OI 1993/1994
 Książeczki OI
 Reprezentacja
 Obozy Olimpiady
 Galeria zdjęć
 Ciekawe odsyłacze
 OIG LiveCD
 IV OIG 2009/2010
 Historia OIG
 SIO
 MAIN
IV Olimpiada Informatyczna 1996/97

Zadanie: REK
Autor: Wojciech Rytter
REKURENCYJNA MRÓWKA

Zawody II stopnia  
Plik źródłowy: REK.??? (np. pas, c, cpp)
Plik wykonywalny: REK.exe
Plik wejściowy: REK.in
Plik wyjściowy: REK.out

Mrówka ma obejść wszystkie pola szachownicy 2n x 2n poza polami zabronionymi - każde pole dokładnie jeden raz. Obchodzenie musi się zacząć w polu startowym leżącym w lewym górnym rogu i zakończyć na polu leżącym na brzegu szachownicy (mrówka na końcu opuszcza szachownicę). Zakładamy, że pole startowe nie jest zabronione. W jednym kroku mrówka może przejść do jednego z co najwyżej czterech sąsiednich pól szachownicy (w górę, dół, lewo lub prawo).

Mrówka obchodzi szachownicę w sposób w pewnym sensie rekurencyjny: aby obejść kwadrat 2k x 2k dzieli go na cztery części (rekurencyjne ćwiartki) o rozmiarach 2k-1 x 2k-1, a następnie obchodzi każdą z nich, to znaczy, jeżeli mrówka wejdzie do jednej z ćwiartek, to może z niej wyjść dopiero wtedy, gdy obejdzie wszystkie nie zabronione pola w tej ćwiartce.

Rysunek 1 przedstawia dwie trasy rekurencyjnej wędrówki mrówki na szachownicy o rozmiarach 23 x 23, od pola startowego (0,0) do pola leżącego odpowiednio na górnym oraz lewym brzegu szachownicy.

Trasa mrówki
Rysunek 1

Zadanie

Napisz program, który:
  • wczytuje z pliku tekstowego REK.IN liczbę całkowitą dodatnią n określającą jednoznacznie rozmiar szachownicy 2n x 2n oraz liczbę m pól zabronionych i ich listę,
  • na każdym z czterech brzegów szachownicy znajduje pole, na którym może się zakończyć rekurencyjna wędrówka mrówki, spełniająca podane wyżej warunki lub stwierdza, że takiego pola nie ma,
  • zapisuje wyniki w pliku tekstowym REK.OUT.
Uwaga: każde z czterech pól narożnych należy do dwóch brzegów szachownicy.

Wejście

W pierwszym wierszu pliku tekstowego REK.IN jest zapisana liczba całkowita dodatnia n <= 30.

W drugim wierszu jest zapisana liczba pól zabronionych m <= 50.

W każdym z kolejnych m wierszy jest zapisana para liczb całkowitych nieujemnych i, j oddzielonych pojedynczym odstępem, są to dwie współrzędne: numer wiersza i oraz numer kolumny j odpowiedniego zabronionego pola. Wiersze szachownicy numerujemy od góry w dół, a kolumny od lewej do prawej, od 0 do 2n-1.

Wyjście

W każdym z czterech kolejnych wierszy pliku tekstowego REK.OUT należy zapisać dwie liczby całkowite nieujemne oddzielone pojedynczym odstępem - współrzędne (numer wiersza i numer kolumny) odpowiedniego końcowego pola rekurencyjnej trasy mrówki leżącego na: górnym, prawym, dolnym oraz lewym brzegu szachownicy (w takiej kolejności) lub jedno słowo NIE, jeśli takiego pola nie ma.

Przykład

Dla pliku REK.IN będącego opisem szachownicy przedstawionej na rysunku:
3
15
2 0
1 0
3 0
6 0
7 0
6 1
7 1
6 2
7 2
6 3
7 3
0 2
0 3
0 6
0 7
1 6
1 7
poprawnym rozwiązaniem jest plik REK.OUT
0 4
NIE
NIE
4 0

Twój program powinien szukać pliku REK.IN w katalogu bieżącym i tworzyć plik REK.OUT również w bieżącym katalogu. Plik zawierający napisany przez Ciebie program w postaci źródłowej powinien mieć nazwę REK.???, gdzie zamiast ??? należy wpisać co najwyżej trzyliterowy skrót nazwy użytego języka programowania. Ten sam program w postaci wykonalnej powinien być zapisany w pliku REK.EXE.




Wersja do druku