|
|||||||||||||||
|
Pochylnia
Na pochylni na nabrzeżu portowym są ułożone w przypadkowej kolejności beczki w trzech kolorach: czerwone, zielone i niebieskie. Trzeba je uporządkować, za pomocą dźwigu w taki sposób, aby na początku (najniżej) były czerwone, następnie niebieskie, a na końcu (najwyżej) zielone. Dźwig - w jednym ruchu - może podnieść do góry jednocześnie trzy sąsiednie beczki w dowolnym miejscu na pochylni i przenieść je na koniec, za beczki leżące powyżej, które stoczą się pod własnym ciężarem w dół wypełniając lukę. Trzeba ułożyć plan pracy dźwigu dyktujący w kolejnych ruchach, którą trójkę beczek przenieść na koniec. Ułożenie beczek na pochylni zapisujemy za pomocą ciągu l liter c, n, z, gdzie l to liczba beczek. Litery c, n, z w tym ciągu symbolizują odpowiednio beczkę czerwoną, niebieską lub zieloną. Zakładamy, że liczba beczek l jest nie większa niż 2000 oraz, że na pochylni są przynajmniej 3 beczki zielone. Plan porządkowania beczek za pomocą dźwigu można zapisać w postaci skończonego ciągu R = (r1,...,rk) liczb całkowitych dodatnich nie większych niż l- 2. Kolejny i-ty wyraz ciągu R - ri to pozycja (licząc od dołu) najniższej z trzech beczek, jakie należy przenieść na koniec w i-tym ruchu.
Przykład9 beczek ułożonych na pochylni w kolejności: (czerwona, zielona, niebieska, niebieska, czerwona, niebieska, zielona, zielona, niebieska) zapisujemy za pomocą ciągu: (c, z, n, n, c, n, z, z, n).Dźwig pracujący według planu R = (6, 2, 5) będzie zmieniał ich ułożenie w następujący sposób: (c, z, n, n, c, n, n, z, z), (c, c, n, n, z, z, z, n, n), (c, c, n, n, n, n, z, z, z) i po trzech ruchach uporządkuje je w kolejności czerwone- niebieskie-zielone.
ZadanieNapisz program, który:
Dla każdego ułożenia początkowego beczek (jeśli są przynajmniej trzy beczki zielone) istnieje wiele planów ich porządkowania w kolejności czerwone- niebieskie-zielone. Mogą się one różnić liczbą ruchów. Twój program powinien znaleźć i wypisać tylko jeden z nich. Liczba ruchów nie musi być minimalna, aby rozwiązanie było poprawne. Powinieneś jednak dążyć do tego by Twój program układał plany porządkowania beczek w możliwie małej liczbie ruchów i aby znajdował je możliwie jak najszybciej. Wejście
Wyjście
PrzykładDla pliku POC.IN:9 c z n n c n z z n poprawnym rozwiązaniem jest następujący ciąg w pliku POC.OUT: Twój program powinien szukać pliku POC.IN w katalogu bieżącym i tworzyć plik POC.OUT również w bieżącym katalogu. Plik zawierający napisany przez Ciebie program w postaci źródłowej powinien mieć nazwę POC.???, gdzie zamiast ??? należy wpisać co najwyżej trzyliterowy skrót nazwy użytego języka programowania. Ten sam program w postaci wykonywalnej powinien być zapisany w pliku POC.EXE.
|