Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024

2020-2022 2023 Regulations Schedule RODO info Ranking

Problem description


Kosmiczne paliwo
(F)
Limit pamięci: 256 MB
Limit czasu: 1.00 s

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