Logo
(追記) (追記ここまで)

30638번 - Поиск фальшивых монет 서브태스크점수다국어인터랙티브

시간 제한메모리 제한제출정답맞힌 사람정답 비율
3 초 1024 MB3411100.000%

문제

Это интерактивная задача.

Перед вами партия из $n$ золотых монет, среди которых есть $k$ фальшивых. Все монеты выложены в ряд. Предполагаемый вес $i$-й монеты равен $i$ грамм. Если монета фальшивая, ее вес равен 0ドル$ грамм.

Монеты трогать запрещено и единственная доступная вам операция --- это выбрать некоторое 1ドル \leq p \leq n$ и взвесить первые $p$ монет. В результате вам будет сказан настоящий суммарный вес этих монет.

Используя как можно меньше операций узнайте, какие $k$ монет являются фальшивыми. Количество баллов будет зависеть от количество запросов, сделанных вашим решением, подробности смотрите в системе оценки.

입력

출력

제한

인터랙션 프로토콜

Каждый тест состоит из $t$ игр, в которых вы должны узнать, какие монеты фальшивые. В самой первой строке находится единственное целое число $t$ (1ドル \leq t \leq 50$) --- количество игр. Каждая игра состоит из взаимодействия в описанном ниже формате. После окончания всех игр, ваша программа должна завершиться.

В начале каждой игры вам дается два целых числа $n$ и $k$ (1ドル \leq n \leq 10^9,ドル 1ドル \leq k \leq \min{(100, n)}$). После этого вы можете сделать несколько запросов взвешивания.

Для того чтобы сделать запрос взвешивания выведите <<? $p$>>. В результате вам будет возвращено единственное целое число $a$. Если $a = -1,ドル ваша программа превысила допустимый лимит запросов взвешивания на игру и должна немедленно завершиться. На каждую игру разрешено сделать не более 3500ドル$ запросов взвешивания. Иначе $a \geq 0$ это настоящий суммарный вес монет 1,ドル 2, \ldots, p$.

Для того чтобы сказать угаданное множество, выведите <<! $i_1$ $i_2$ $\ldots$ $i_k$>>, где 1ドル \leq i_1, i_2, \ldots, i_k \leq n$ это различные индексы фальшивых монет в произвольном порядке. В результате вам будет возвращено единственное целое число $a$. Если $a = -1,ドル то ваш ответ неправильный и ваша программа должна немедленно завершиться. Иначе $a = 1,ドル и ваша программа должна продолжить взаимодействие следующей игрой или завершиться, если это была последняя игра.

Обратите внимание, что интерактор играет адаптивно. Не гарантируется, что множество фальшивых монет зафиксировано до начала игры. Единственное что гарантируется --- в любой момент времени ответы, которые были даны в течение игры, соответствуют хотя бы одному множеству фальшивых монет. Ваш ответ на игру является правильным, если он соответствует всем ответам на запросы, данным в течение игры, а также не существует ни одного другого множества фальшивых монет, которое соответствует всем ответам.

После вывода каждого действия вашей программы выводите перевод строки. После вывода каждого действия вашей программы делайте сброс потока вывода.

Если вы используете <<writeln>> в Паскале, <<cout << ... << endl>> в C++, <<System.out.println>> в Java, <<print>> в Python, <<Console.WriteLine>> в C#, то сброс потока вывода у вас происходит автоматически, дополнительно ничего делать не требуется. Если вы используете другой способ вывода, рекомендуется делать сброс потока вывода. Обратите внимание, что перевод строки надо выводить в любом случае.

서브태스크

Баллы за первые 5 групп ставятся только при прохождении всех тестов группы и всех тестов необходимых групп. Для каждой из первых 5 групп зафиксировано некоторое число $maxQ$. Тест в первых 5 группах считается пройденным, если $q \le maxQ$.

Балл за каждую игру в последней группе равняется $min\left(50, \left\lfloor 50 \sqrt{\frac{k + 30}{q}} \right\rfloor\right)$. Общее количество баллов за тест равняется минимальному количеству баллов за все игры. Общее количество баллов за последнюю группу равняется минимальному количеству баллов за все тесты в этой группе.

Обратите внимание, что решение получает 100ドル$ баллов, если оно делает $\leq k + 30$ запросов взвешивания во всех тестах во всех играх.

번호배점제한
15

$n \le 1000,ドル $maxQ = 1000$

29

$n \le 1000,ドル $maxQ = 600$

310

$k \le 30,ドル $maxQ = 1000$

413

$k = 3,ドル $maxQ = 33$

513

$k = 4,ドル $maxQ = 34$

650

$maxQ = 3500$

예제 입력 1

2
3 2
2
1
10 4
13
13
20
29
1

예제 출력 1

? 3
! 1 3
? 5
? 6
? 8
? 10
! 10 8 6 2

노트

В первой игре монеты 1ドル,ドル 3ドル$ являются фальшивыми. Таким образом, настоящие веса монет это $[0, 2, 0]$. С помощью одного запроса мы узнаем их суммарный вес 2ドル,ドル после чего однозначно можно восстановить множество фальшивых монет.

Во второй игре монеты 2,ドル 6, 8, 10$ являются фальшивыми. Таким образом, настоящие веса монет это $[1, 0, 3, 4, 5, 0, 7, 0, 9, 0]$. По ответам на запросы взвешивания можно однозначно восстановить множество фальшивых монет.

출처

Olympiad > Moscow Open Olympiad in Informatics > Moscow Open Olympiad in Informatics 2022-23 > Day 2 GTA번

채점 및 기타 정보

  • 예제는 채점하지 않는다.
  • 이 문제의 채점 우선 순위는 2이다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /