Сортировка записей(9 задач)
Использование сортировки(13 задач)
Быстрая сортировка(55 задач)
Сортировка слиянием(9 задач)
Сортировка подсчетом(27 задач)
Сканирующая прямая(39 задач)
Сортировка событий(4 задач)
Палиндром - это строка, которая читается одинаково как справа налево, так и слева направо.
На вход программы поступает набор больших латинских букв (не обязательно различных). Разрешается переставлять буквы, а также удалять некоторые буквы. Требуется из данных букв по указанным правилам составить палиндром наибольшей длины, а если таких палиндромов несколько, то выбрать первый из них в алфавитном порядке.
В первой строке входных данных содержится число \(N\) (1 <= \(N\) <= 100000). Во второй строке задается последовательность из \(N\) больших латинских букв (буквы записаны без пробелов).
В единственной строке выходных данных выдайте искомый палиндром.
25 баллов — (1 ≤ N ≤ 10) .
25 баллов — (1 ≤ N ≤ 1 000 ) .
50 баллов — полные ограничения.
Примечание
Сложность работы программы должна быть O(n). Использование встроенной сортировки(sort, sorted), алгоритмов сортировки пузырёк/quick sort/merge sort и других запрещено!
3 AAB
ABA
6 QAZQAZ
AQZZQA
6 ABCDEF
A
На числовой прямой окрасили \(N\) отрезков. Известны координаты левого и правого концов каждого отрезка (\(L_i\) и \(R_i\)). Найти длину окрашенной части числовой прямой.
В первой строке находится число \(N\), в следующих \(N\) строках - пары \(L_i\) и \(R_i\). \(L_i\) и \(R_i\) - целые, -1 000 000 000 <= \(L_i\) <= \(R_i\) <= 1 000 000 000, 1 <= \(N\) <= 15 000
Вывести одно число - длину окрашенной части прямой.
1 10 20
10
1 10 10
0
2 10 20 20 40
30
Дано \(N\) прямоугольников со сторонами, параллельными осям координат. Требуется определить площадь фигуры, образованной объединением данных прямоугольников.
В первой строке находится число прямоугольников - \(N\). Затем идут \(N\) строк, содержащих по 4 числа: \(x_1\), \(y_1\), \(x_2\), \(y_2\) - координаты двух противоположных углов прямоугольника. 1 <= \(N\) <= 100, координаты целые и по абсолютному значению не превосходят 10 000.
Вывести одно число - площадь фигуры.
1 -10 -10 10 10
400
2 1 1 2 2 3 3 4 4
2
Ввод 1 Ввод 2 4 4 1 1 1 2 1 4 5 8 Вывод 1 Вывод 2 4 16
Для сортировки последовательности чисел широко используется быстрая сортировка - QuickSort. Далее приведена программа, которая сортирует массив a
, используя этот алгоритм.
var a : array [1..N] of integer; procedure QSort(left, right : integer); var i, j : integer; key : integer; buf : integer; begin key := a[(left + right) div 2]; i := left; j := right; repeat while a[i] < key do {первый while} inc(i); while key < a[j] do {второй while} dec(j); if i <= j then begin buf := a[i]; a[i] := a[j]; a[j] := buf; inc(i); dec(j); end; until i > j; if left < j then QSort(left, j); if i < right then QSort(i, right); end; begin ... QSort(1, N); end.
Хотя QuickSort является самой быстрой сортировкой в среднем, существуют тесты, на которых она работает очень долго. Оценивать время работы алгоритма будем количеством сравнений с элементами массива (то есть суммарным количеством сравнений в первом и втором while
). Требуется написать программу, генерирующую тест, на котором быстрая сортировка сделает наибольшее число таких сравнений.
В первой строке находится единственное число N.
Ограничения: 1 <= N <= 70 000.
Вывести перестановку чисел от 1 до N, на которой быстрая сортировка выполнит максимальное число сравнений. Если таких перестановок несколько, вывести любую из них.
1
1
3
1 3 2