ГлавнаяСборникиТурнирыРазделыФорумыУчастникиПечатьПомощьО системе

Турниры > Алгоритмы и структуры данных — 2020. Набор задач 1 > задача:


Подсказки к задачам

Алгоритмы и структуры данных — 2020. Набор задач 1

Старт: 04.сен.2020 в 08:00:00
Финиш: 18.сен.2021 в 08:00:00
Турнир завершён!
• Турнирная таблица

Задачи турнира

• Подсказки к задачам
• A. Шаг сортировки выбором
• B. Шаг сортировки вставками
• C. Шаги сортировки слиянием
• D. Сто тысяч
• E. Сортировка структур
• F. Сорок миллионов
• G. Порядковая статистика
• H. Сортировка асимптотик

Обратная связь

Если у вас есть предложения или пожелания по работе Contester, посетите форум сайта www.contester.ru.

Лимит времени 2000/4000/4000/4000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

C. Шаги сортировки слиянием

Используйте стандартную сортировку слиянием, но перед выходом из рекурсии выводите все элементы от a[l] до a[r].

F. Сорок миллионов

Вы, разумеется, помните, что массив такой длины не успеют отсортировать не только алгоритмы со сложностью O(N2), но и даже алгоритмы со срожностью O(NlogN).

Значит, нужно искать в условии задачи что-то, что всё-таки позволит вам её решить. Обратите внимание, какими числами заполняется массив.

Программа будет работать быстрее, если не хранить весь массив в памяти.

G. Порядковая статистика

Размер массива в этой задаче очень велик. Если в быстрой сортировке мы выбираем опорный элемент следующим образом:

swap(a[l], a[rand() % (r - l + 1)]);

то из-за того, что константа RAND_MAX на сервере равна 32767, обмен будет неравномерным (опорный элемент случайно выбирается не из всего диапазона [l; r], а только из его первых 32 тысяч элементов), и решение будет получать TL.

Следует использовать другой способ выбора случайного опорного элемента, например, такой (этот способ также не идеален, но в данном случае лучше):

int random(int l, int r) {
    return l + (double)rand() / RAND_MAX * (r - l);
}

swap(a[l], a[random(l, r)]);

Кроме того, у этой задачи есть очень короткое стандартное решение, но его предлагается отыскать самостоятельно.

Обратите внимание, что при вычислении элементов массива может произойти переполнение.

H. Сортировка асимптотик

В этой задаче всего один тест. Вам нужно написать программу, выводящую ответ в консоль.

Помните, что алгоритм, имеющий сложность f(N), более эффективен по сравнению с алгоритмом, имеющим сложность g(N), если при неограниченном увеличении N предел отношения f(N)/g(N) равен нулю.

В решении этой задачи вам может оказать большую помощь Wolfram Alpha.

Похоже, больше всего затруднений вызывает пункт #6. Нужно вспомнить школьную алгебру и придать этой формуле более знакомый вид.

 

Для отправки решений необходимо выполнить вход.

www.contester.ru