Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

WSDOCPP14 - Logowanie

Firma "FRAKTAX" oferuje usługi w przepowiadaniu przyszłości. Żeby można było skorzystać z promocji polegającej na darmowej przepowiedni, należy się zalogować na stronie firmy. Niestety firma posiada tylko trzy serwery, które moją ograniczoną wydajność. Twoim zadaniem jest określenie, do którego serwera użytkownik ma się zalogować lub gdy wszystkie serwery są przeciążone, wstawić użytkownika do kolejki i gdy tylko wyloguje się użytkownik z dowolnego serwera, zalogować użytkownika czekającego najdłużej w kolejce.

Dopuszczalne sytuacje:

  • jeśli użytkownik chce się wylogować, a okazuje się, że nie jest zalogowany,  wypisujemy napis Error
  • jeśli użytkownik chce się zalogować, a okazuje się, że jest już zalogowany, wypisujemy napis Zalogowany
  • jeśli użytkownik chce się zalogować, ale wszystkie serwery są przeciążone, to wrzucany jest do kolejki (nie wypisujemy żadnego napisu)
  • jeśli użytkownik wylogowuje się, a w kolejce są inni userzy, to logujemy użytkownika, który czeka najdłużej i wypisujemy napis Zalogowano [nr_serwera] [nr], gdzie nr, to nr użytkownika, który czeka najdłużej w kolejce a nr_serwera to numer najmniej obciążonego serwera 
  • jeżeli użytkownik wylogowuje się, a nie ma żadnych osób w kolejce, nie wypisujemy nic
  • jeżeli użytkownik loguje się i jest to możliwe, to przydzielany jest do najmniej obciążonego serwera (jeśli jest kilka takich, to przydzielany jest do serwera o najmniejszym numerze) i wypisujemy napis: Zalogowano [nr_serwera] [nr]. Serwery mają numery 1, 2 i 3 (dotyczy to także sytuacji logowania użytkownika czekającego w kolejce).

Twoim zadaniem jest przeprowadzenie powyższej symulacji.

Wejście

W pierwszym wierszu dwie liczby naturalne n i q, określające odpowiednio przepustowość każdego z trzech serwerów (nie więcej niż 10000) oraz liczbę zapytań (nie więcej niż milion).

W kolejnych q wierszach zapytania polegające na zalogowaniu lub wylogowaniu użytkownika w formacie [z/w] [nr], gdzie z oznacza chęć zalogowania użytkownika o numerze nr użytkownika, a litera w oznacza chęć wylogowania użytkownika o numerze nr

Wyjście

Zdefiniowane w podpunktach

Przykład

Wejście:
1 10
z 1
z 2
z 1
z 3
z 4
z 5
w 4
w 2
w 2
w 1


Wyjście:
Zalogowano 1 1
Zalogowano 2 2
Zalogowany
Zalogowano 3 3
Error
Zalogowano 2 4
Error
Zalogowano 2 5

Dodane przez:Marcin Kasprowicz
Data dodania:2019-09-12
Limit czasu wykonania programu:1s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: ASM32-GCC MAWK BC C-CLANG NCSHARP CPP14-CLANG COBOL COFFEE D-CLANG D-DMD DART ELIXIR FANTOM FORTH GOSU GRV JS-MONKEY JULIA KTLN NIM OBJC OBJC-CLANG OCT PICO PROLOG PYPY3 R RACKET RUST SCM qobi CHICKEN SQLITE SWIFT UNLAMBDA VB.NET

ukryj komentarze
2019-09-30 01:28:17 Sebastian Toton
Wydaje mi się, że testy są błędnie dobrane (a przynajmniej ten przykładowy). Po wylogowaniu użytkownika z id = 2 na jego miejsce przyszedł ten z id = 4. Po wylogowaniu użytkownika z id = 1 serwer pierwszy pozostaje pusty a serwerze drugim jest dwóch zalogowanych użytkowników z id (4 oraz 5) gdzie możliwa przepustowość to 1.
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.