Skip to content

Latest commit

 

History

History
559 lines (405 loc) · 18.7 KB

File metadata and controls

559 lines (405 loc) · 18.7 KB

Куча, сортировки, двоичный поиск

A. Хип ли?

Имя входного файла: isheap.in

Имя выходного файла: isheap.out

Структуру данных Heap можно реализовать на основе массива.

Для этого должно выполнятся основное свойство Heap’a, которое заключается в следующем.

Для каждого 0 ≤ i < n выполняются следующие условия:

  • Если 2_i_ + 1 < n, то a[i] ≤ a[2_i_ + 1]
  • Если 2_i_ + 2 < n, то a[i] ≤ a[2_i_ + 2]

Дан массив целых чисел. Определите является ли он Heap’ом.

Формат входного файла

Первая строка входного файла содержит целое число n ( 1 ≤ n ≤ 10^5 ). Вторая строка содержит n целых чисел по модулю не превосходящих 2 · 10^9.

Формат выходного файла

Выведите "YES", если массив является Heap’ом и "NO" в противном случае.

Пример

isheap.in

5
1 0 1 2 0

isheap.out

NO

isheap.in

5
1 3 2 5 4

isheap.out

YES

B. Приоритетная очередь

Имя входного файла: priorityqueue.in

Имя выходного файла: priorityqueue.out

Реализуйте приоритетную очередь. Ваша очередь должна поддерживать следующие операции: добавить элемент, извлечь минимальный элемент, уменьшить элемент, добавленный во время одной из операций. Все операции нумеруются по порядку, начиная с 1.

Формат входного файла

Входной файл содержит описание операций со очередью. В очередь помещаются и извлекаются только целые числа, не превышающие по модулю 10^9.

Формат выходного файла

Выведите последовательно результат выполнения всех операций extract-min. Если перед очередной операции extract-min очередь пуста, выведите вместо числа звездочку.

Пример

priorityqueue.in

push 3
push 4
push 2
extract-min
decrease-key 2 1
extract-min
extract-min
extract-min

priorityqueue.out

2
1
3
*

C. Cортировка

Имя входного файла: sort.in

Имя выходного файла: sort.out

Дан массив целых чисел. Ваша задача - отсортировать его в порядке неубывания. Для того, чтобы узнать, какую сортировку вам нужно реализовать, возьмите остаток от деления вашего номера на 3.

  • 0 - Сортировка слиянием.
  • 1 - Сортировка кучей.
  • 2 - Быстрая сортировка.

Формат входного файла

В первой строке входного файла содержится число n ( 1 ≤ n ≤ 100000 ) - количество элементов в массиве. Во второй строке находятся n целых чисел, по модулю не превосходящих 10^9.

Формат выходного файла

В выходной файл надо вывести этот же массив в порядке неубывания, между любыми двумя числами должен стоять ровно один пробел.

Пример

sort.in

10
1 8 2 1 4 7 3 2 3 6

sort.out

1 1 2 2 3 3 4 6 7 8

D. Цифровая сортировка

Имя входного файла: radixsort.in

Имя выходного файла: radixsort.out

Дано n строк, выведите их порядок после k фаз цифровой сортировки.

Формат входного файла

В первой строке входного файла содержится число n - количество строк, m - их длина и k – число фаз цифровой сортировки ( 1 ≤ n ≤ 1000 , 1 ≤ km ≤ 1000 ). В следующих n строках находятся сами строки.

Формат выходного файла

Выведите строки в порядке в котором они будут после k фаз цифровой сортировки.

Пример

radixsort.in

3 3 1
bbb
aba
baa

radixsort.out

aba
baa
bbb

radixsort.in

3 3 2
bbb
aba
baa

radixsort.out

baa
aba
bbb

radixsort.in

3 3 3
bbb
aba
baa

radixsort.out

aba
baa
bbb

E. Анти-QuickSort

Имя входного файла: antiqs.in

Имя выходного файла: antiqs.out

Для сортировки последовательности чисел широко используется быстрая сортировка - Quick Sort. Далее приведена программа, которая сортирует массив a, используя этот алгоритм.

def qsort ( l e f t , right ) :
key = a [ ( l e f t + right ) // 2]
i = l e f t
j = right
while i <= j :
while a [ i ] < key : # f i r s t while
i += 1
while a [ j ] > key : # second while
j −= 1
i f i <= j :
a [ i ] , a [ j ] = a [ j ] , a [ i ]
i += 1
j −= 1
i f l e f t < j :
qsort ( l e f t , j )
i f i < right :
qsort ( i , right )
qsort (0 , n − 1)

Хотя QuickSort является самой быстрой сортировкой в среднем, существуют тесты, на которых она работает очень долго. Оценивать время работы алгоритма будем количеством сравнений с элементами массива (то есть суммарным количеством сравнений в первом и втором while). Требуется написать программу, генерирующую тест, на котором быстрая сортировка сделает наибольшее число таких сравнений.

Формат входного файла

В первой строке находится единственное число n ( 1 ≤ n ≤ 70000 ).

Формат выходного файла

Вывести перестановку чисел от 1 до n, на которой быстрая сортировка выполнит максимальное число сравнений. Если таких перестановок несколько, вывести любую из них.

Пример

antiqs.in

3 

antiqs.out

1 3 2

F. Стильная одежда

Имя входного файла: style.in

Имя выходного файла: style.out

Глеб обожает шоппинг. Как-то раз он загорелся идеей подобрать себе майку и штаны так, чтобы выглядеть в них максимально стильно. В понимании Глеба стильность одежды тем больше, чем меньше разница в цвете элементов его одежды. В наличии имеетсяN ( 1 ≤ N ≤ 100 000) маек и M ( 1 ≤ M ≤ 100 000) штанов, про каждый элемент известен его цвет (целое число от 1 до 10 000 000). Помогите Глебу выбрать одну майку и одни штаны так, чтобы разница в их цвете была как можно меньше.

Формат входного файла

Сначала вводится информация о майках: в первой строке целое число N ( 1 ≤ N ≤100 000) и во второй N целых чисел от 1 до 10 000 000 - цвета имеющихся в наличии маек. Гарантируется, что номера цветов идут в возрастающем порядке (в частности, цвета никаких двух маек не совпадают). Далее в том же формате идёт описание штанов: их количество M ( 1 ≤ M ≤ 100 000) и в следующей строке M целых чисел от 1 до 10 000 000 в возрастающем порядке - цвета штанов.

Формат выходного файла

Выведите пару неотрицательных чисел - цвет майки и цвет штанов, которые следует выбрать Глебу. Если вариантов выбора несколько, выведите любой из них.

Примеры

style.in

2
3 4
3
1 2 3

style.out

3 3

style.in

2
4 5
3
1 2 3

style.out

4 3

G. Стильная одежда 2

Имя входного файла: style.in

Имя выходного файла: style.out

Глеб решил развить успех и купить более сложный комплект: из кепки, майки, штанов и ботинок. В понимании Глеба стильность комплекта тем больше, чем меньше максимальная разница в цвете элементов его одежды. В наличии имеется N1 кепок, N2 маек, N3 штанов и N4 ботинок, про каждый элемент известен его цвет. Помогите Глебу выбрать комплект.

Формат входного файла

Сначала вводится информация о кепках, потом о майках, потом о штанах и в конце о ботинках:. Про каждый тип одежды в первой строке целое число Ni ( 1 ≤ Ni ≤ 100 000) и во второй Ni целых чисел от 1 до 100 000 - цвета имеющихся предметов.

Формат выходного файла

Выведите четыре числа - цвета кепки, майки, штанов и ботинок. Если вариантов выбора несколько, выведите любой из них.

Примеры

style.in

3
1 2 3
2
1 3
2
3 4
2
2 3

style.out

3 3 3 3

style.in

1
5
4
3 6 7 10
4
18 3 9 11
1
20

style.out

5 7 9 20

H. K-ая порядковая статистика

Имя входного файла: kth.in

Имя выходного файла: kth.out

Дан массив изnэлементов. Какое число k-ое в порядке возрастания в этом массиве.

Формат входного файла

В первую строке входного файла содержится два числа n - размер массива и k.( 1 ≤ kn ≤ 3 · 10^7 ). Во второй строке находятся числа A, B, C, a1 , a2 по модулю не превосходящие 10^9. Вы должны получить элементы массива начиная с третьего по формуле: ai = Aai−2 + Bai−1 + C. Все вычисления должны производится в 32 битном знаковом типе, переполнения должны игнорироваться.

Формат выходного файла

Выведите значение k-ое в порядке возрастания число в массиве a.

Пример

kth.in

5 3
2 3 5 1 2

kth.out

13

kth.in

5 3
200000 300000 5 1 2

kth.out

2

Во втором примере элементы массива a равны: ( 1 , 2 , 800005 ,− 516268571 , 1331571109 ).

I. Двоичный поиск

Имя входного файла: binsearch.in

Имя выходного файла: binsearch.out

Дан массив из n элементов, упорядоченный в порядке неубывания и m запросов: найти первое и последнее вхождение числа в массив.

Формат входного файла

В первую строке входного файла содержится одно число n - размер массива.( 1 ≤ n ≤ 100000 ). Во второй строке находится n чисел в порядке неубывания - элементы массива. В третьей строке находится число m - количество запросов. В следующей строке находится m чисел - запросы.

Формат выходного файла

Для каждого запроса выведите в отдельной строке номер первого и последнего вхождения этого числа в массив. Если числа в массиве нет выведите два раза -1.

Пример

binsearch.in

5
1 1 2 2 2
3
1 2 3

binsearch.out

1 2
3 5
-1 -1

J. Гирлянда

Имя входного файла: garland.in

Имя выходного файла: garland.out

Гирлянда состоит из n лампочек на общем проводе. Один её конец закреплён на заданной высоте A мм (h1 = A). Благодаря силе тяжести гирлянда прогибается: высота каждой неконцевой лампы на 1 мм меньше, чем средняя высота ближайших соседей (hi = (hi−1 + hi+1)/2 − 1 для 1 < i < N). Требуется найти минимальную высоту второго конца B (B = hn) при условии, что ни одна из лампочек не должна лежать на земле (hi > 0 для 1 ≤ iN).

Формат входного файла

В первую строке входного файла содержится два числа n и A ( 3 ≤ n ≤ 1000 , n - целое, 10 ≤ A ≤ 1000 ,A - вещественное).

Формат выходного файла

Вывести одно вещественное число B с двумя знаками после запятой.

Пример

garland.in

8 15

garland.out

9.75

garland.in

692 532.81 

garland.out

446113.34

K. Поезда

Имя входного файла: trains.in

Имя выходного файла: trains.out

В связи с участившимся числом аварий на железнодорожной ветке Москва–Саратов, руководство железной дороги решило изменить график движения поездов. Тщательный анализ состояния железнодорожного полотна показал, что оптимальным является следующий график движения поездов с учетом остановок на станциях: сначала поезд идет на протяжении T1 минут со скоростью V1 метров в минуту, затем T2 минут со скоростью V2 метров в минуту, ..., наконец, TN минут со скоростью VN метров в минуту. В течение некоторых интервалов поезд может стоять (скорость равна 0). По действующей инструкции обеспечения безопасности движения поездов расстояние между локомотивами двух следующих друг за другом поездов должно быть не менее L метров. Определите минимально допустимый интервал в минутах между отправлениями поездов, позволяющий им двигаться по этому графику без опасного сближения.

Формат входного файла

В первых двух строках входного файла содержится два натуральных числа, задающие минимально допустимое расстояние L и количество участков пути N ( 100 ≤ L ≤ 10 000, 1 ≤ N ≤ 1000 ). Далее следует N пар целых чисел Ti и Vi, задающих график движения поездов ( 1 ≤ Ti ≤ 1000 , 0 ≤ Vi ≤ 1000 ).

Формат выходного файла

В выходной файл необходимо вывести искомый интервал между отправлениями поездов в минутах, не менее чем с тремя верными знаками после десятичной точки.

Пример

trains.in

1000
4
10 0
30 80
15 0
20 100

trains.out

27.500