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: GEN
Autor: Przemysława Kanarek
GENOTYPY

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

Genotypy są skończonymi łańcuchami genów. Opisujemy je za pomocą słów utworzonych z wielkich liter alfabetu angielskiego A - Z. Różne litery oznaczają różne rodzaje genów. Gen może pączkować - zmieniając się w dwójkę nowych genów. Tymi przemianami rządzi skończony zbiór reguł. Każdą regułę pączkowania można zapisać w postaci trójki wielkich liter A1A2A3 co oznacza, że gen A1 może się zmienić w dwójkę genów A2A3.

Wielką literą S oznaczamy specjalny rodzaj genów zwanych supergenami. Hodowla genotypu rozpoczyna się od łańcucha supergenów i polega na sterowanym pączkowaniu wybranych genów zgodnie z ustalonymi regułami.

Zadanie

Napisz program, który:
  • wczytuje z pliku tekstowego GEN.IN skończony zbiór reguł pączkowania genów oraz ciąg słów określających genotypy, jakie należy wyhodować,
  • dla każdego z danych genotypów bada, czy można go wyhodować z pewnego skończonego łańcucha supergenów zgodnie z danymi regułami pączkowania i jeśli tak, znajduje minimalną długość takiego łańcucha,
  • zapisuje wyniki w pliku tekstowym GEN.OUT.

Wejście

W pierwszym wierszu pliku tekstowego GEN.IN jest zapisana jedna liczba całkowita 1 <= n <= 10000. W każdym z n kolejnych wierszy jest zapisana jedna reguła pączkowania, w postaci słowa złożonego z trzech wielkich liter A - Z.

W następnym wierszu jest zapisana jedna liczba całkowita 1 <= k <= 10000. W każdym z k kolejnych wierszy jest zapisany jeden genotyp w postaci niepustego słowa złożonego z co najwyżej 100 liter A - Z.

Wyjście

W i-tym z kolejnych k wierszy pliku tekstowego GEN.OUT należy zapisać:
  • jedną liczbę całkowitą dodatnią oznaczającą minimalną długość łańcucha supergenów potrzebnego do wyhodowania i-tego danego genotypu, albo
  • jedno słowo NIE, jeśli tego genotypu nie da się wyhodować.

Przykład

Dla pliku GEN.IN:
6
SAB
SBC
SAA
ACA
BCC
CBC
3
ABBCAAABCA
CCC
BA
poprawnym rozwiązaniem jest plik GEN.OUT:
3
1
NIE

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




Wersja do druku