Вы находитесь на странице: 1из 46

Основы олимпиадного программирования

C++ для олимпиадного


программирования

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Библиотеки
std

using namespace std;

Теперь:
•• cin вместо std::cin;

•• sort вместо std::sort и т. д.


Пример кода
Стандартные типы и классы
vector
set
map
Основы олимпиадного программирования

O-нотация,
асимптотика
алгоритмов

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Время работы
программы

C++ выполняет 10⁸ операций в секунду.


Как считать время работы?
Асимптотика

n, 2n, 5n, n/2 — одно и то же для нас.

f(n) = O(g(n)) <=> f(n) <= C × g(n)

O(n) n <=10⁸

O(n × log n) n <= 10⁶

O(n²) n <=10⁴

O(n³) n <=500
Основы олимпиадного программирования

Постановка задачи
о сортировке

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Сортировка массива

Сортировка — упорядочивание элементов


в возрастающем (или убывающем) порядке.

(5, 100, 6, 1, 2) -> (1, 2, 5, 6, 100)

(5, 100, 6, 1, 2) -> (100, 6, 5, 2, 1)

(5, 100, 6, 1, 100, 2) -> (1, 2, 5, 6, 100, 100)

(1) -> (1)

() -> ()
Стабильность сортировки

Сортировка называется стабильной, если она оставляет


равные элементы в том же порядке, в каком они были.

((25, София), (28, Анна), (25, Павел))

((25, София), (25, Павел), (28, Анна)) — стабильно.

((25, Павел), (25, София), (28, Анна)) — НЕ стабильно.


Основы олимпиадного программирования

Сортировка пузырьком,
вставками и выбором

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Сортировка пузырьком

5, 2, 100, 1, 4, 6
Сортировка вставками

5, 2, 100, 1, 4, 6
Сортировка выбором

5, 2, 100, 1, 4, 6
Основы олимпиадного программирования

Сортировка слиянием

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Сортировка слиянием

5, 2, 100, 1, 4, 6, 3, 7
Основы олимпиадного программирования

Быстрая сортировка

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Быстрая сортировка (Quick Sort)

5, 2, 4, 1, 4, 6, 1, 4
Основы олимпиадного программирования

Сортировка подсчетом

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Сортировка подсчетом

1, 5, 2, 7, 2, 5, 1, 4, 7, 1, 1

4 единицы
2 двойки
0 троек
1 четверка
2 пятерки
0 шестерок
2 семерки

1, 1, 1, 1, 2, 2, 4, 5, 5, 7, 7

O(n + C)
Основы олимпиадного программирования

Встроенная
сортировка,
избыточность
сортировки

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Встроенная сортировка
Избыточность сортировки
Основы олимпиадного программирования

Бинарный поиск

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Бинарный поиск: идея

00000000011111111111111

•• Найти первую единицу

•• Делим каждый раз отрезок пополам,


переходим в одну из половин

O(log n)
Бинарный поиск: алгоритм

1, 2, 5, 8, 10, 15, 100, 250, 403


Бинарный поиск: код
Основы олимпиадного программирования

Встроенный бинарный
поиск, вещественный
бинарный поиск

Горбачев Егор Андреевич


преподаватель олимпиадного программирования
Встроенный бинарный поиск
Вещественный
бинарный поиск
Источники

1. В онлайн-курсе использованы материалы и схемы, разработанные автором.

Вам также может понравиться