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: ALI
Autor: Piotr Chrząstowski-Wachtel
ALIBABA

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

Aby otworzyć Sezam, trzeba mieć komplet co najmniej z żetonów złotych, s — srebrnych i m —miedzianych.

Alibaba ma początkowo pewną liczbą żetonów każdego rodzaju i może je wymieniać u strażnika Sezamu według ściśle określonych reguł.

Każda reguła jest postaci:

z1, s1, m1 -> z2, s2, m2 (zi, si, mi należą do {0,1,2,3,4})

gdzie: z1, s1, m1 oznaczają odpowiednio liczby żetonów złotych, srebrnych i miedzianych, jakie Alibaba musi dać strażnikowi, zaś z2, s2, m2 - liczby żetonów złotych, srebrnych i miedzianych, które otrzyma w wyniku transakcji wymiany.

Żetony otrzymane w wyniku transakcji można wymieniać w kolejnych transakcjach.

Zadanie

Napisz program, który:
  • wczytuje z pliku tekstowego ALI.IN zestawy danych, z których każdy zawiera:
    • liczby żetonów złotych, srebrnych i miedzianych znajdujących się początkowo w posiadaniu Alibaby
    • opis kompletu żetonów otwierającego Sezam, oraz reguły transakcji;
  • dla każdego zestawu danych stwierdza, czy istnieje skończony ciąg transakcji, który pozwoli Alibabie zgromadzić komplet żetonów otwierający Sezam i jeśli tak, znajduje i zapisuje w pliku tekstowym ALI.OUT minimalną długość takiego ciągu, a w przeciwnym przypadku zapisuje w pliku ALI.OUT odpowiedź NIE.

Wejście

W pierwszym wierszu pliku tekstowego ALI.IN jest zapisana jedna liczba całkowita dodatnia d<=10. Jest to liczba zestawów danych.

Dalej są zapisane kolejno zestawy danych. Każdy zestaw danych składa się z wielu wierszy.

W pierwszym wierszu są zapisane trzy liczby całkowite nieujemne zp, sp, mp należące do {0,1,2,3,4}. Są to liczby żetonów złotych, srebrnych i miedzianych, jakie na początku ma Alibaba.

W drugim wierszu są kolejne trzy liczby całkowite z, s, m należące do {0,1,2,3,4}. Są to liczby żetonów złotych, srebrnych i miedzianych, jakie trzeba mieć, aby otworzyć Sezam.

W trzecim wierszu jest zapisana liczba reguł r, gdzie 1<=r<=10.

W każdym z kolejnych r wierszy jest zapisany ciąg sześciu liczb z1, s1, m1, z2, s2, m2 należących do {0,1,2,3,4}. Każda taka szóstka liczb jest zapisem jednej reguły transakcji: z1, s1, m1 -> z2, s2, m2.

Liczby w każdym wierszu są pooddzielane pojedynczymi odstępami.

Wyjście

W i-tym wierszu pliku tekstowego ALI.OUT należy zapisać wynik dla i-tego zestawu danych:
  • jedną liczbę całkowitą nieujemną, tj. minimalną liczbę transakcji wymiany, jakich Alibaba musi dokonać, aby zgromadzić komplet żetonów otwierający Sezam,
  • albo jedno słowo NIE.

Przykład
Dla pliku tekstowego ALI.IN:

2
2 2 2
3 3 3
3
0 1 1 2 0 0
1 0 1 0 2 0
1 1 0 0 0 2
1 1 1
2 2 2
4
1 0 0 0 1 0
0 1 0 0 0 1
0 0 1 1 0 0
2 0 0 0 2 2
poprawnym rozwiązaniem jest plik tekstowy ALI.OUT:
NIE
9

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




Wersja do druku