Только что закончилась восьмая личная интернет олимиада по задачам ИОИП, которая прошла вчера. Предлагаю обсудить здесь задачи. Задачи
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3831 |
3 | Radewoosh | 3646 |
4 | jqdai0815 | 3620 |
4 | Benq | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | gamegame | 3386 |
10 | ksun48 | 3373 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 164 |
1 | maomao90 | 164 |
3 | Um_nik | 163 |
4 | atcoder_official | 160 |
5 | -is-this-fft- | 158 |
6 | awoo | 157 |
7 | adamant | 156 |
8 | TheScrasse | 154 |
8 | nor | 154 |
10 | Dominater069 | 153 |
Название |
---|
Сдал задачу на 4:59 :D
Что-то результатов еще нет:(
И не будет, все уже спать пошли. Надеюсь, что завтра хоть увидим
Вот Результаты -> http://neerc.ifmo.ru/school/io/archive/20130318/standings-20130318-individual.html
Mr.Mike when you will add problems in gyms? We are waiting for you...
The tests&checkers are not published yet
Как решали задачу E на 100?
Ну вот лично я решал так:
Будем для каждого
a[i]
считать число элементов таких, чтоa[i] < a[j]
иi > j
, то есть инверсии по сути. Это можно сделать деревом Фенвика, например. Затем заметим, что после каждого прохода Гарри у каждогоa[i]
это число либо уменьшается на1
, если больше 0, либо остается 0. То есть за k ходов все эти значения уменьшатся на k, если больше k, либо станут = 0.Теперь нам нужно по этим данным восстановить исходную перестановку. Можно это сделать по-разному, например деревом отрезков для суммы на отрезке, но так как ограничения позволяют вполне — можно схалявить и написать того же фенвика и бинпоиск. Просто мы будем расставлять элементы в порядке увеличения их значения. То есть сначала мы найдем позицию для
1
, потом для2
,3
и так далее... Просто бинпоиском ищем нашу позицию и фенвиком узнаем — сколько позиций до нашей не занято — там однозначно будут стоять бОльшие числа.Мой код
Задача становится легче, если постараться ответить на вопрос — какое число будет стоять на первом месте?
К примеру, для 20 чисел и 10 проходов? Легко понять, что это будет минимальное число из первых 11-ти. А на втором месте? Минимальное число из первых 12-ти, кроме того, что уже стоит на первом месте.
Все. Строим дерево отрезков на поиск минимума, в котором еще храним порядковый номер числа. Делаем запрос на минимум для первого числа ( от 1 до 11-го), кидаем его в ответ, меняем в дереве отрезков его на максимальное возможное, пересчитываем дерево. Для второго числа запрос на минимум на интервале от 1 до 12-го. И т.д.
Крутая идея) А если вместо дерева отрезков использовать
priority_queue
, то код вообще короче некуда выходит)а как решать C?
Сначала поймем — когда ответ
IMPOSSIBLE
. По очевидным причинам так происходит, когда у нас больше одной вершины со степенью 1. Единственное исключение — случай, когда у нас всего 2 вершины — такого, кстати, в тестах не было почему-то.Теперь, собственно, само решение:
Известно, что
gcd(x, x + 1) = 1
. Используем это. Нам нужно обойти наш граф так, чтобы у каждой вершины (кроме начальной) были ребра с числамиx
иx + 1
. Это сделать очень просто — идем dfs-ом из вершины со степенью 1, если такая есть, иначе из любой. И просто проставляем цифры по порядку от 1 до m. Это всегда будет верно, потому что, если степень вершины > 1, то мы из неё сможем перейти дальше, а если мы пришли в неё по ребруx
, то куда-то из неё мы пойдем по ребруx + 1
.Что насчет D? Просто нужно было аккуратно юзать кучу?
Сортируем массив. Понятно, что теперь минимальная разница будет между соседними элементами. Проходим по нему и пихаем в дерево разницы между соседними элементами, сравнивая как сказано в условии. Теперь просто на каждой из n итераций берём и удаляем лучшие 2 элемента из дерева. Пусть из {a, b, c, d} мы выбрали (b, c). Тогда удаляем из дерева a-b, b-c и c-d (учитывая крайние случаи), вставляем a-d. Только нужно ещё поддерживать для каждого элемента указатели к соседним неудалённым элементам.
может ли кто-нибудь выложить куда-нибудь свой код и дать ссылку?
Вот
Я наконец-то выложил результаты, архивы и разборы. Извиняюсь перед сообществом за такие задержки :)
О! У задач есть naming collisions, например 65D - Гарри Поттер и Распределяющая Шляпа.
Добавил в тренировки 2012-2013 Цикл интернет-олимпиад. Восьмая личная олимпиада (18 марта 2013 года), финальный тур ИОИП (17 марта 2013 года). Лучи уважения авторам — контест распарсился легко и непринужденно.
В тренировках — 2012-2013 Цикл интернет-олимпиад. Восьмая личная олимпиада (18 марта 2013 года), финальный тур ИОИП (17 марта 2013 года).
Простите, но это всё-таки не седьмая, а восьмая олимпиада