Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
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łowego | 50000B |
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 ELIXIR FANTOM FORTH GOSU GRV JS-MONKEY JULIA KTLN NIM OBJC OBJC-CLANG OCT PICO PROLOG R RACKET RUST SCM qobi CHICKEN SQLITE SWIFT UNLAMBDA VB.NET |
ukryj komentarze
2024-09-27 15:52:45
Fajnie, jakby można by to wyjasnić, o co tu chodzi, bo rzeczywiście poprzdni komentarz pokazuje jakąś nieścisłość. Tym bardziej, że jeszcze nikt nie zaliczył tego zadania. "3. Szerszą dyskusję (wskazówki, pomysły, rozwiązania) znajdziesz na forum." Forum nie dziala, jest jedynie takie cos: 502 Bad Gateway nginx/1.6.2 |
|
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. |