graphlogo

Wydział Matematyki i Informatyki

Uniwersytetu Mikołaja Kopernika w Toruniu

1inf 2023/24 - Podstawy algorytmiki i programowania, LC*

[B] B. Identyfikatory
Data zakończenia: 2023-12-13 16:00
Języki: c cpp
Limit czasu: 3.0 s
Limit pamięci: 32 MB
Limit rozmiaru rozwiązania: 100 kB
Jest rok 2084 i, choć ze stuletnim opóźnieniem, nastała era Wielkiego Brata. W celu zwiększenia kontroli nad obywatelami, a tym samym przeciwdziałania łamaniu prawa i porządku, rząd decyduje się na radykalny środek - wszyscy obywatele mają mieć małe mikrokomputery wszczepione w lewe nadgarstki. Taki komputer zawiera wszystkie rodzaje informacji osobistych oraz nadajnik, który pozwoli rejestrować i monitorować przemieszczanie się obywateli. (Pożądanym skutkiem ubocznym tego procesu jest fakt, że skróciły się kolejki po zasiłek dla chirurgów plastycznych.)

Podstawowy element każdego komputera zawiera niepowtarzalny kod identyfikacyjny, co najwyżej 50-znakowy, składający się z 26 małych liter alfabetu angielskiego. Zestaw znaków dla danego kodu wybierany jest dość przypadkowo. Skomplikowany sposób, w jaki kod jest drukowany w chip sprawia, że znacznie łatwiej jest produkować chipy z kodami, które powstają przez przegrupowanie innych kodów. Tak więc, gdy jakiś zestaw liter zostanie wybrany, produkowane są chipy ze wszystkimi możliwymi do uzyskania z tego zestawu kodami.

Załóżmy na przykład, że stwierdzono iż kod będzie zawierał dokładnie 3 wystąpienia litery a, dwa b i jedno c. Wówczas trzy z dopuszczalnych 60 kodów to:

      abaabc
      abaacb
      ababac

Te trzy kody są wymienione od góry do dołu w kolejności alfabetycznej. Spośród wszystkich kodów generowanych z tego zestawu znaków, kody te pojawią w trzech kolejnych chipach.
Napisz program, który pomoże w nadawaniu tych kodów identyfikacyjnych. Twój program będzie wczytywał kolejno ciągi złożone z nie więcej niż 50 małych liter (oczywiście litery mogą się powtarzać) i wypisywał na ekranie następny kod, jeśli taki istnieje, lub komunikat "No Successor" jeśli podany kod jest ostatni dla tego zestawu znaków.

Wejście i wyjście

Wejście składa się z kilku wierszy, każdy z nich zawiera łańcuch znaków reprezentujący kod. Wejście zostanie zakończone wierszem składającym się z jednego znaku #.

Dla każdego wczytanego kodu wypisz w osobnym wierszu następny w kolejności kod lub informację "No Successor".

Przykładowe wejście

abaacb
cbbaa
#

Przykładowe wyjście

ababac
No Successor
Powrót
© 2009-2020 • ZawodyWeb Team
IKS - Inwestycja w Kierunki Strategiczne na Wydziale Matematyki i Informatyki UMK

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego