QOJ.ac

QOJ

実行時間制限: 10 s メモリ制限: 512 MB 満点: 100 難易度: [表示] インタラクティブ ハック可能 ✓

#24229. Мус

統計

Ця задача є інтерактивною.

Напередодні відкриття фестивалю десертів шеф-кухар ретельно вдосконалює фірмовий витвір своєї крамниці — «千层幻彩慕斯». Цей десерт складається з $n$ шматочків мусу з різними смаками, з послідовними номерами $0,1,\dots,n-1$.

Проте в метушні помічник випадково переплутав порядок шматочків мусу. Тепер вони стоять у ряд зліва направо, утворюючи невідому перестановку позицій $p=(p_0,p_1,\dots,p_{n-1})$, де $p_i$ — номер шматочка мусу на $i$-й позиції.

Щоб з'ясувати точне розташування кожного шматочка мусу, ви можете скористатися приладом для перевірки десертів. Щоразу, коли ви вибираєте три попарно різні позиції $x,y,z$, прилад повідомляє суму найменшого та найбільшого номерів цих трьох шматочків мусу:

$$ \min(p_x,p_y,p_z)+\max(p_x,p_y,p_z). $$

Дзвін, що сповістить про відкриття, ось-ось пролунає. Чи зможете ви за обмежену кількість перевірок точно відновити справжнє розташування кожного шматочка мусу?


Є перестановка довжини $n$, позначена $p$, елементами якої є рівно $0,1,\ldots,n-1$. Ви не знаєте вмісту $p$.

Ви можете вибрати три попарно різні індекси $x,y,z$, і бібліотека взаємодії поверне

$$ \min(p_x,p_y,p_z)+\max(p_x,p_y,p_z). $$

Ваше завдання — відновити всю перестановку. Обмеження на кількість запитів і спосіб обчислення балів залежно від кількості запитів наведено нижче.

Деталі реалізації

Учасникам не потрібно й не слід реалізовувати функцію main. Надісланий файл з кодом має містити:

#include "mousse.h"

Ви маєте реалізувати дві такі функції:

void init(int c);
std::vector<int> mousse(int c, int n);
  • $c$ — номер підзадачі; $c=0$ позначає приклад. Кожен тест містить рівно один набір даних. Для цього тесту бібліотека взаємодії один раз викликає init(c), а потім один раз — mousse(c,n).
  • mousse має повернути масив довжини $n$, у якому $i$-й елемент дорівнює $p_i$; індексація починається з $0$.

Учасники можуть зробити один запит, викликавши таку функцію:

int query(int x, int y, int z);

Має виконуватися $0\le x,y,z < n$, а $x,y,z$ мають бути попарно різними. Функція повертає $\min(p_x,p_y,p_z)+\max(p_x,p_y,p_z)$.

Тестування програми

У вкладеннях містяться mousse.h, локальна бібліотека взаємодії grader.cpp і приклад програми template_mousse.cpp. Збережіть свою програму у файлі mousse.cpp і виконайте в каталозі цієї задачі:

g++ grader.cpp mousse.cpp -o mousse -O2 -std=c++14
./mousse < mousse1.in

Локальна бібліотека взаємодії зчитує приховану перестановку зі стандартного вводу; програма учасника не має самостійно зчитувати ці дані. Формат вхідних даних такий:

  • Перший рядок містить два цілі числа $c,n$.
  • Другий рядок містить $p_0,p_1,\ldots,p_{n-1}$.

Якщо відповідь правильна, бібліотека взаємодії виводить Correct! і Max queries used: Q, де $Q$ — кількість запитів у цьому тесті; якщо відповідь неправильна, вона виводить Wrong answer.. У разі некоректного запиту або перевищення обмеження на кількість запитів програма виводить повідомлення про помилку в стандартний потік помилок і завершується. Можна додати параметр -v, щоб побачити кількість запитів у цьому тесті.

Приклади

Вхідні дані 1

0 10
0 2 9 1 5 8 3 7 6 4

Вихідні дані 1

Correct!
Max queries used: 15

Пояснення

Наприклад, у разі виклику query(0,1,2) три відповідні значення дорівнюють $0,2,9$, тому повертається $0+9=9$. Програма-зразок використовує для цього набору даних $15$ запитів. Якщо ви застосуєте іншу стратегію, ця кількість може відрізнятися.

Обмеження

Для всіх тестових даних $n\in\{10,100,10^5\}$, а $p$ є перестановкою чисел $0\sim n-1$. Кожен тест містить рівно один набір даних.

Номер підзадачі Бали $n =$ $Q_{\max} = $ Особлива властивість
$1$ $5$ $10$ $1000$ Немає
$2$ $5$ $100$ $10000$ Немає
$3$ $30$ $10^5$ $2\times10^6$ $p_0=0$
$4$ $60$ $10^5$ $2\times10^6$ Немає

Для прикладу $c=0$, $n=10$, а обмеження на кількість запитів дорівнює $1000$.

Оцінювання

Зверніть увагу:

  • Бібліотека взаємодії не є адаптивною. Перестановку для кожного тесту визначено до виклику програми учасника, і вона не змінюється залежно від запитів.
  • Учасники не мають отримувати приховану перестановку шляхом зчитування зі стандартного вводу або іншими недозволеними способами. Реалізація бібліотеки взаємодії, яку використовуватимуть під час остаточного оцінювання, може відрізнятися від локальної.

Якщо в певному тесті mousse повертає неправильну відповідь, параметри query некоректні або кількість запитів перевищує $Q_{\max}$ для цієї підзадачі, коефіцієнт оцінки за цей тест дорівнює $0$.

У підзадачах $1,2$ повну кількість балів за підзадачу можна отримати лише за правильні відповіді в усіх її тестах.

Для підзадач $3,4$, якщо коефіцієнт оцінки хоча б одного тесту дорівнює $0$, за всю підзадачу нараховується $0$ балів. Інакше нехай $Q$ — найбільша кількість запитів серед усіх тестів цієї підзадачі. Коефіцієнт оцінки $f(Q)$ визначається за наведеною таблицею:

Кількість запитів $Q_i$ Коефіцієнт оцінки $f_i$
$99970$ $100\%$
$99975$ $98\%$
$99981$ $95\%$
$99988$ $90\%$
$99996$ $84\%$
$100000$ $80\%$
$100010$ $74\%$
$100026$ $66\%$
$100051$ $58\%$
$100093$ $52\%$
$150000$ $32\%$
$200000$ $20\%$
$1660964$ $8\%$
$2000000$ $5\%$

Якщо $Q\le 99970$, то $f(Q)=100\%$. Якщо $Q$ лежить між двома сусідніми рядками таблиці $(Q_i,f_i)$ та $(Q_{i+1},f_{i+1})$, то:

$$ f(Q)=f_i+\frac{Q-Q_i}{Q_{i+1}-Q_i}(f_{i+1}-f_i). $$

Оцінка за підзадачу $3$ дорівнює $30f(Q)$, а за підзадачу $4$ — $60f(Q)$. Остаточна оцінка округлюється до $3$ знаків після десяткової коми.

Обмеження часу: $10\ \mathrm{s}$.

Обмеження пам'яті: $512\ \mathrm{MiB}$.

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#2924EditorialOpenNew Editorial for Problem #24229wangmaruiView

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.