Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
Jest to problem interaktywny. Powinieneś
wykonać operację flush po wypisaniu każdego wiersza.
W C++ możesz użyć funkcji fflush(stdout)
lub
cout.flush()
, w Javie System.out.flush()
, w
Pythonie sys.stdout.flush()
.
Bajter Bitl znowu wdał się w kłopoty w kosmosie. Żeby wykaraskać się z tarapatów, musi w idealny sposób rozdysponować pozostałe K litrów paliwa na N silników.
Każdy silnik w jego statku pozwala na przebycie pewnej odległości, zależnej od tego, ile litrów paliwa się do niego wleje. Dokładniej, dla i-tego silnika istnieje pewna funkcja fi, określona na liczbach całkowitych od 0 do K, która jest nieujemna i ściśle malejąca. Po wlaniu Ti litrów paliwa do i-tego silnika, można przelecieć $\sum_{t = 0}^{T_i} f_i(t)$ jednostek astronomicznych. Przez specyficzną konstrukcję silników, zachodzi fi(x) ≠ fj(y), jeśli i ≠ j lub x ≠ y.
Niestety, tabelka z dokładnymi wartościami tych funkcji uległa zniszczeniu. Na szczęście, ostała się niezwykle stara maszyna z technologią z XX wieku, która pozwala porównywać wartości funkcji. Bajter może z jej pomocą odpowiedzieć na zapytanie: “Czy wartość funkcji fi(x) jest większa od wartości funkcji fj(y)?”.
Bajter chce, mimo tak ograniczonej technologii, wykorzystać każdy litr paliwa do perfekcji i dotrzeć najdalej jak jest to możliwe.
Niestety, przez wolne działanie maszyny porównującej, Bajter może zadać tylko 5 000 zapytań do maszyny, zanim dopadną go bandyci. Czy jesteś w stanie mu pomóc i uratować jego statek?
Interakcja
Na początku sprawdzaczka podaje (na standardowe wejście programu)
dwie liczby całkowite N i
K, oddzielone pojedynczym
odstępem, oznaczające odpowiednio liczbę silników i liczbę litrów
paliwa, którymi dysponuje Bajter Bitl.
Twój program może zadać co najwyżej 5 000 zapytań. Każde zapytanie powinno
składać się ze znaku zapytania i czterech liczb całkowitych i, x, j, y
(1 ≤ i, j ≤ N,
0 ≤ x, y ≤ K),
oddzielonych pojedynczymi odstępami. Po wypisaniu wiersza, należy
wczytać jedną liczbę całkowitą 0
bądź 1
,
oznaczającą odpowiednio, że fi(x) < fj(y)
lub fi(x) > fj(y).
W zadanym zapytaniu powinien zajść co najmniej jeden z następujących
warunków: i ≠ j lub
x ≠ y.
Jeżeli znajdziesz optymalne rozwiązanie T1, T2, …, TN,
wypisz wiersz składający się z wykrzyknika i kolejnych wartości ciągu
Ti,
pooddzielanych pojedynczymi odstępami. Wypisanie rozwiązania nie wlicza
się do limitu zapytań.
Interaktor może być adaptywny i zależeć od wyników
Twoich poprzednich zapytań. Możesz założyć, że odpowiedzi na zadane
przez Ciebie zapytania są poprawne tj. istnieją pewne funkcje fi, które
spełniają wszystkie podane założenia.
Uwaga: błędne zapytanie albo przekroczenie limitu zapytań może
zakończyć się werdyktem błędu wykonania.
Ograniczenia
1 ≤ N ≤ 32, 1 ≤ K ≤ 230.
Przykładowa interakcja
Wejście | Wyjście |
---|---|
3 4 |
|
? 1 3 2 2 |
|
0 |
|
? 1 2 2 3 |
|
1 |
|
? 1 2 3 0 |
|
1 |
|
? 2 2 3 0 |
|
1 |
|
! 2 2 0 |