Polish version    English version  
  Historia OI -> V OI 1997/1998 -> 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
Wyniki III etapu
Wyniki II etapu
Wyniki I etapu
Zadania
Regulamin
Terminarz
Statystyki
IV OI 1996/1997
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
V Olimpiada Informatyczna 1997/98

Zadanie: GON
Autor: Adam Borowski
Gonitwa

III ETAP, PIERWSZY DZIEŃ ZAWODÓW - WTOREK 7 KWIETNIA 1998 r.  
Plik źródłowy: GON.??? (np. pas, c, cpp)
Plik wykonywalny: GON.exe
Plik wejściowy: GON.in
Plik wyjściowy: GON.out

Gonitwa jest grą planszową dla dwóch osób A i B. Plansza do gry składa się z pól ponumerowanych kolejnymi liczbami naturalnymi, poczynając od 1. Dla każdej pary różnych pól wiadomo, czy są sąsiednie, czy nie. Każdy z graczy dysponuje jednym pionem, który początkowo znajduje się na wskazanym z góry polu planszy, każdy pion na innym polu. Ruch gracza polega na przesunięciu własnego piona na jedno z sąsiednich pól lub pozostawieniu piona na miejscu.

Plansza ma następujące właściwości:

  • nie zawiera trójkątów, tzn. nie istnieją trzy różne pola, takie że każde dwa z nich są sąsiednie,
  • każde pole może być osiągnięte zarówno przez gracza A, jak i przez gracza B.

Gra składa się z wielu rund następujących po sobie. W jednej rundzie każdy z graczy wykonuje jeden ruch, przy czym gracz A zawsze wykonuje swój ruch przed ruchem gracza B. Powiemy, że gracz B dogonił gracza A, jeżeli oba piony znajdą się na tym samym polu. Rozstrzygnij, czy dla danych początkowych położeń obu pionów, gracz B może dogonić gracza A, niezależnie od tego jak dobrze gra gracz A. Jeśli tak, to po ilu rundach gracz B dogoni gracza A, jeżeli gracz A stara się uciekać jak najdłużej, a gracz B stara się dogonić gracza A jak najszybciej i obaj grają optymalnie?

Przykład
[Przyklad]

Rozważmy planszę przedstawioną na rysunku. Sąsiednie pola planszy są połączone odcinkami. Jeżeli na początku gry pion gracza A znajduje się na polu 9, natomiast pion gracza B jest na polu 4, to gracz B dogoni A w trzeciej rundzie, o ile obaj gracze grają optymalnie. Gdyby pion gracza A znajdował się początkowo na polu 8, to ruszając z pola 4 gracz B nie ma szans na dogonienie A, jeżeli tylko ten gra optymalnie.

Zadanie

Napisz program, który:

  • wczytuje z pliku tekstowego GON.IN opis planszy i numery pól, na których początkowo umieszczone są piony graczy;
  • sprawdza, czy gracz B może dogonić gracza A i jeżeli tak, to oblicza liczbę rund, po których B dogoni A przy założeniu, że obaj gracze grają optymalnie;
  • zapisuje wynik w pliku tekstowym GON.OUT.

    Wejście

    W pierwszym wierszu pliku wejściowego GON.IN znajdują się cztery liczby całkowite n, m, a oraz b, oddzielone pojedynczym odstępem, gdzie: 2<=n<=3000, n-1<=m<=15000, 1<=a,b<=n oraz a <b. Są to odpowiednio: liczba pól na planszy, liczba wszystkich różnych par (nieuporządkowanych) tych pól, które ze sobą sąsiadują, numer pola, na którym jest umieszczony pion gracza A oraz numer pola, na którym jest umieszczony pion gracza B. W każdym z następnych m wierszy znajdują się dwie różne liczby całkowite dodatnie oddzielone pojedynczym odstępem. Liczby w każdym z tych wierszy są numerami dwóch pól, które ze sobą sąsiadują.

    Wyjście

    Twój program powinien zapisać w pierwszym i jedynym wierszu pliku GON.OUT jedno słowo NIE, jeśli gracz B nigdy nie dogoni gracza A, a w przeciwnym przypadku jedną liczbę całkowitą — liczbę rund, po których, gracz B dogoni gracza A.

    Przykład

    Dla pliku wejściowego GON.IN:

    9 11 9 4
    1 2
    3 2
    1 4
    4 7
    7 5
    5 1
    6 9
    8 5
    9 8
    5 3
    4 8
    
    poprawnym rozwiązaniem jest plik wyjściowy GON.OUT:
    3

    Twój program powinien szukać pliku GON.IN w katalogu bieżącym i tworzyć plik GON.OUT również w bieżącym katalogu. Plik zawierający napisany przez Ciebie program w postaci źródłowej powinien mieć nazwę GON.??? 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 GON.EXE.





  • Wersja do druku