Требования к заданию:
- Хотя бы в одной из задач надо использовать свои функции сортировки и поиска.
- Желательно хотя бы в одной из задач использовать библиотечную функцию сортировки.
- Почти все программы должны работать для больших n (десятки тысяч или десятки
миллионов, в зависимости от задачи). Пользуйтесь динамически
выделяемыми массивами (указатели и функция malloc в C)!
Задачи, к которым указаны номера, можно после локальной проверки проверить также
на сайте informatics.mccme.ru
(внимательно читайте условия задач на сайте — могут отличаться!).
- В задачах должна быть сделана «защита от дурака», т.е. при
некорректных введённых данных программа не должна вылетать, а
должна сообщать об этом с предложением ввести корректно.
- Бинарный поиск. (1456)
Даны n чисел в порядке невозрастания:
a1 >= a2 >= … >= an.
Для данного числа b найти его место в этом ряду —
с сохранением упорядоченности.
При этом, если b совпадает с ai,
то b должен быть после ai.
- Левый и правый бинарный поиск. (111728)
Даны n чисел в порядке неубывания:
a1 <= a2 <= … <= an.
Для числа b найти минимальный i и максимальный j такие,
что b = ai и b = aj.
- Сортировка времени.
Упорядочить по неубыванию n моментов времени, заданных в виде
часы:минуты:секунды (по желанию — через пробел).
Упорядоченные моменты вывести в том же виде, как на входе.
- Результаты олимпиады. (1446)
Даны n пар чисел: идентификатор участника и его результат.
Упорядочить их по невозрастанию результатов, а при равных
результатах — по возрастанию идентификаторов.
- Такси.
Есть n такси, каждое со своим тарифом (цена за километр),
и n пассажиров, которым
надо ехать в разные стороны на данные расстояния. Найти
распределение пассажиров по такси с минимальной суммарной
стоимостью. Желательно помимо суммарной стоимости вывести
это распределение.
- Различные числа. (1418)
Даны n чисел. Найти, сколько среди них различных.
- Пары с заданной суммой.
Даны n чисел. Вывести те пары, сумма в которых равна данной.
Каждое число может войти только в одну пару.
- Обратная перестановка.
Дана перестановка чисел 1…n:
a1 a2 … an (i -> ai).
Вывести обратную к ней перестановку
b1 … bn (j -> bj).
- Минимум в скользящем окне. (756)
Даны n чисел {ai} и размер окна k.
Вывести n-k+1 минимумов чисел {a1…ak},
{a2…ak+1}, …
- Восстановление порядка.
Изначально были расположены в некотором порядке n различных чисел.
Затем были составлены (n-1) пар ai,ai+1.
Эти пары в случайном порядке подаются на вход.
Надо выдать n чисел в исходном порядке.
- Анаграммы.
Даны n слов. Найти среди них анаграммы: слова, состоящие
из одного и того же набора букв. n может быть БОЛЬШИМ.
Выбрать один из вариантов вывода:
- самые "мощные" анаграммы из заданного количества букв
- самые "мощные" независимо от длины
- анаграммы из самого большого количества букв
- Выпуклая оболочка. (290)
Даны n пар координат точек на плоскости.
Вывести координаты вершин выпуклой оболочки этих точек.
(Попробовать применить сортировку!)
- Аргументы программы.
Агументы программы, кроме нулевого, упорядочить по неубыванию в смысле обычного сравнения строк
и вывести их по одному на строку в виде: номер аргумента, пробел, значение аргумента.
- Сортировка строк.
Ввести все поданные на вход программы строки (EOF — конец ввода).
Вывести их упорядоченными по неубыванию в смысле обычного сравнения строк.
- Составление словаря текста.
Ввести все поданные на вход программы строки (EOF — конец ввода).
Выделить из них все слова (словом считать последовательность символов,
внутри которой нет пробельных символов и знаков препинания).
Вывести все различные слова упорядоченными по неубыванию (сравнивать без учёта регистра
символов). В каждой строке вывода: сколько раз встречается слово, пробел, само слово.
В конце вывести некоторую статистику: количество строк, слов, различных слов,
средняя длина слова (и что-нибудь ещё по вкусу).
- Приоритетная очередь. (755)
Реализовать приоритетную очередь с операциями добавления элемента
и извлечения (удаления) максимального элемента.
Исходно очередь пуста. Затем на вход программы подаются количество команд
и сами команды в виде: 0 пробел число (добавить число в очередь),
1 (извлечь максимальное число из очереди).
Для каждой команды извлечения программа должна вывести удаляемое число.