Who made it through?#244

Who made it through? (Editorial)

Задача цілком технічна: усі сім олімпіад влаштовані однаково, різняться лише фільтром учасників і розміром команди.

Зведемо правила в таблицю:

  • IOI — без обмежень, місця;

  • CEOI — без обмежень, місця;

  • EGOI — лише дівчата (gender = \texttt{female}), місця;

  • EJOI — лише ті, кому не більше років (age \le 15), місця;

  • BaltOI — без обмежень, місць;

  • BalkOI — усі, крім одинадцятикласників (grade \ne 11), місця;

  • JBOI — усі, крім десяти- та одинадцятикласників (grade \notin \{10, 11\}), місця.

Для кожної запитаної олімпіади алгоритм однаковий:

  1. відібрати учасників, що проходять за фільтром;

  2. відсортувати їх за спаданням балів;

  3. узяти перших (або всіх, якщо їх менше ніж );

  4. вивести назву олімпіади, а потім відібраних учасників за зростанням .

Зверніть увагу на два моменти, де найлегше помилитися.

По-перше, сортування відбувається за балами, а виведення — за . Це два різні порядки, і плутати їх не можна: спочатку відбираємо найкращих за балами, потім перевпорядковуємо вже відібрану четвірку.

По-друге, умова прямо каже, що команда може бути неповною. Тому не робіть безумовного зрізу перших чотирьох — перевіряйте розмір відфільтрованого списку.

Приємна деталь: усі бали різні, тому питання про рівні результати не виникає взагалі.

Складність — \mathcal{O}(m \cdot n \log n), тобто щонайбільше сім сортувань масиву з 10^4 елементів. Можна відсортувати всіх учасників один раз на початку — тоді кожен фільтр зберігає порядок, і сортувати повторно не доведеться.