Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Задачки по программированию

question

Тут я хочу собирать интересные, на мой взгляд задачи, из разных предметных областей


Примеры задач, которые часто встречаются на олимпиадах по программированию (школьные, ICPC-стиль, региональные этапы):

1. Разминка (простая арифметика и условия)

Задача: Чётное или нечётное Дано целое число N. Определить, является ли оно чётным.

Усложнение: Вывести "YES", если число делится и на 2, и на 3.


2. Работа с массивами

Задача: Второй максимум Дан массив из N чисел. Найти второй по величине элемент.

Усложнение: Сделать за O(N) без сортировки.


3. Два указателя / жадные алгоритмы

Задача: Пара с заданной суммой Дан отсортированный массив и число K. Найти, есть ли пара чисел с суммой K.

Сложность: O(N)


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

Задача: Поиск корня Дано число X. Найти sqrt(X) с точностью 10^-6.

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


5. Динамическое программирование

Задача: Кузнечик Кузнечик прыгает по клеткам от 1 до N. Может прыгать на 1 или 2 клетки. Сколькими способами он может добраться до клетки N?

(Это классическая задача, сводится к числам Фибоначчи.)


6. Графы

Задача: Проверка связности Дан неориентированный граф. Проверить, является ли он связным.

Алгоритм: DFS или BFS.


7. Кратчайший путь

Задача: Минимальный путь Дан взвешенный граф без отрицательных рёбер. Найти кратчайшее расстояние от вершины S до всех остальных.

Алгоритм: Дейкстра.


8. Строки

Задача: Анаграммы Даны две строки. Определить, являются ли они анаграммами.


9. Комбинаторика / математика

Задача: Быстрое возведение в степень Вычислить a^b mod m, где a, b, m до 10^18.

Алгоритм: бинарное возведение в степень.


10. Более сложный уровень (ICPC-стиль)

Задача: Отрезки Дано N отрезков на прямой. Найти количество пар пересекающихся отрезков.

Решение: сортировка + sweep line + структуры данных (Fenwick / segment tree).