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: SKO
Autor: Bogdan S. Chlebus
Skok w bok

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

Plansza do gry "Skok w bok" jest nieskończoną taśmą pól, nieograniczoną zarówno w lewo jak i w prawo. Na polach planszy stoją pionki. Ich liczba jest skończona. Na jednym polu może stać równocześnie wiele pionków. Zakładamy, że pierwsze od lewej pole, na którym jest przynajmniej jeden pionek, ma numer 0. Pola na prawo od niego są oznaczone kolejno liczbami naturalnymi 1, 2, 3 itd., a pola w lewo liczbami ujemnymi: -1, -2, -3 itd. Ustawienie pionków na taśmie, które będziemy także nazywać konfiguracją, można opisać w ten sposób, że dla każdego pola, na którym jest co najmniej jeden pionek, podaje się numer pola i liczbę pionków na tym polu. Są dwa rodzaje ruchów, zmieniających konfiguracje: skok w prawo i skok w lewo. Skok w prawo polega na zabraniu po jednym pionku z wybranych dwóch sąsiednich pól o numerach p oraz p+1 i dodaniu jednego pionka na polu p+2. Skok w lewo: zabieramy jeden pionek z pola p+2, a dodajemy po jednym na polach p i p+1. Mówimy, że konfiguracja jest końcowa, jeśli na dowolnych dwóch sąsiednich polach znajduje się co najwyżej jeden pionek. Dla każdej konfiguracji istnieje dokładnie jedna konfiguracja końcowa, którą można z niej otrzymać w wyniku skończonej liczby skoków w prawo lub w lewo.

Zadanie

Ułóż program, który:

  • wczytuje opis konfiguracji początkowej z pliku tekstowego SKO.IN,
  • znajduje konfigurację końcową, do jakiej można doprowadzić daną konfigurację początkową i zapisuje wynik w pliku tekstowym SKO.OUT.

Wejście

W pierwszym wierszu pliku SKO.IN jest zapisana jedna liczba całkowita dodatnia n. Jest to liczba niepustych pól danej konfiguracji początkowej. 1Ł n Ł 10000 (dziesięć tysięcy). W każdym z kolejnych n wierszy znajduje się opis jednego niepustego pola konfiguracji początkowej w postaci pary liczb całkowitych oddzielonych odstępem. Pierwsza liczba to numer pola, a druga - to liczba pionków na tym polu. Te opisy są uporządkowane rosnąco według numerów pól. Największy numer pola nie przekracza 10000 (dziesięć tysięcy), a liczba pionków na żadnym polu nie przekracza 108 (sto milionów).

Wyjście

W pierwszym wierszu pliku tekstowego SKO.OUT należy zapisać konfigurację końcową, do której można przekształcić daną konfigurację początkową - numery kolejnych niepustych pól konfiguracji końcowej. Numery te powinny być uporządkowane rosnąco. Liczby w wierszu powinny być pooddzielane pojedyńczym odstępem.

Przykład

Dla pliku tekstowego SKO.IN:

2
0 5
3 3
poprawnym rozwiązaniem jest plik SKO.OUT
-4 -1 1 3 5

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




Wersja do druku