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: BAN
Autor: Piotr Chrząstowski-Wachtel
Bankomaty

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

Każdy członek Bajtlandzkiej Kasy Pożyczkowej ma prawo pożyczyć dowolną sumę mniejszą niż 1030 Bajtlandzkich dukatów, ale musi ją w całości zwrócić do Kasy nie później niż po upływie 7 dni. W sali obsługi klientów Kasy ustawiono 100 bankomatów ponumerowanych od 0 do 99. Każdy bankomat wykonuje tylko jedną operację: wypłaca albo przyjmuje ustaloną kwotę. Bankomat o numerze i wypłaca 2i dukatów, jeśli i jest parzyste, zaś przyjmuje 2i dukatów, jeśli i jest nieparzyste. Gdy klient zamierza wypożyczyć ustaloną kwotę, trzeba zbadać, czy będzie mógł ją pobrać, korzystając co najwyżej raz z każdego z bankomatów i jeśli tak, wyznaczyć numery bankomatów, z których należy skorzystać. Trzeba również zbadać, czy będzie mógł ją zwrócić w podobny sposób i jeśli tak, wyznaczyć numery bankomatów, z których należy skorzystać w celu wykonania tej operacji.

Przykład

Klient, który zamierza pożyczyć 7 dukatów, pobiera najpierw 16 dukatów w bankomacie nr 4 i 1 dukata w bankomacie nr 0, a następnie oddaje 8 dukatów w bankomacie nr 3 i 2 dukaty w bankomacie nr 1. Żeby zwrócić pożyczoną kwotę 7 dukatów, pobiera najpierw 1 dukata w bankomacie numer 0, a następnie oddaje 8 dukatów w bankomacie nr 3.

Zadanie

Napisz program, który:

  • wczytuje z pliku tekstowego BAN.IN liczbę klientów n i dla każdego klienta wysokość kwoty, jaką zamierza pożyczyć w Kasie;
  • dla każdego klienta sprawdza, czy będzie mógł pobrać ustaloną kwotę korzystając co najwyżej raz z każdego bankomatu i jeśli tak, wyznacza numery bankomatów, z których należy skorzystać, oraz czy będzie mógł ją zwrócić w podobny sposób i jeśli tak, wyznacza numery bankomatów, z których należy skorzystać w tym celu;
  • zapisuje wyniki w pliku tekstowym BAN.OUT.

Wejście

W pierwszym wierszu pliku wejściowego BAN.IN znajduje się jedna liczba całkowita dodatnia n <= 1000. Jest to liczba klientów.
W każdym z kolejnych n wierszy jest jedna liczba całkowita dodatnia, mniejsza niż 10^30, zapisana za pomocą co najwyżej 30 cyfr dziesiętnych. Liczba w i-tym z tych wierszy, to wysokość kwoty, którą zamierza pożyczyć klient nr i .

Wyjście

W każdym z 2n kolejnych wierszy pliku wyjściowego BAN.OUT należy zapisać malejący ciąg liczb całkowitych dodatnich z zakresu [0..99] oddzielonych pojedynczym odstępem albo jedno słowo NIE:

  • w pierwszym wierszu i-tej pary wierszy — numery bankomatów, w porządku malejącym, z których powinien skorzystać klient numer i, by pobrać pożyczkę, albo słowo NIE, gdy nie może jej pobrać zgodnie z ustalonymi regułami;
  • w drugim wierszu i-tej pary — numery bankomatów, w porządku malejącym, z których powinien skorzystać klient numer i, oddając pożyczkę albo słowo NIE.

Przykład

Dla pliku tekstowego BAN.IN:

2
7
633825300114114700748351602698

poprawnym rozwiązaniem jest plik wyjściowy BAN.OUT:
4 3 1 0
3 0
NIE
99 3 1
Twój program powinien szukać pliku BAN.IN w katalogu bieżącym i tworzyć plik BAN.OUT również w bieżącym katalogu. Plik zawierający napisany przez Ciebie program w postaci źródłowej powinien mieć nazwę BAN.??? 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 BAN.EXE.





Wersja do druku