Задачки по программированию
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).