Задача A. Сортировка небольшой последовательности Задача B

advertisement
Кружок обучения мастерству программирования при СПбГУ, группа B2
Первое занятие: сортировка, пятница, 1 октября 2010 года
Задача A. Сортировка небольшой
последовательности
Имя входного файла:
bubble.in
Имя выходного файла:
bubble.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
В этой задаче нужно отсортировать числа, заданные
во входном файле.
Формат входных данных
В первой строке входного файла задано целое число n
(1 6 n 6 5 000). Во второй строке заданы через пробел n
целых чисел a1 , a2 , . . ., an (1 6 ai 6 109 ).
Формат выходных данных
В первой строке выходного файла выведите через пробел n чисел — числа ai в неубывающем порядке.
Примеры
bubble.in
3
1 2 3
4
3 2 2 1
5
10 100 10 1000 10
bubble.out
1 2 3
1 2 2 3
10 10 10 100 1000
Задача B. Количество инверсий
такой последовательности требуется оценить среднее значение ее членов. В разных случаях под средним значением понимают разные числа: мы можем вычислить среднее арифметическое, а можем посчитать, какое число в
отсортированной последовательности будет посередине.
Медианой последовательности называется число, которое может разбить все числа последовательности на
два множества: числа в первом множестве не больше медианы, а во втором — не меньше, и при этом мощности множеств равны (то есть в них одинаковое количество элементов). Например, медиана последовательности
{1, 2, 7, 5, 3} — это 3.
Когда в последовательности нечетное количество членов, медиана определяется однозначно — это тот член последовательности, который находится на равном расстоянии от концов последовательности.
В случае, когда в последовательности четное количество членов, медианой могло бы служить любое число
между двумя средними значениями в последовательности. Например, в последовательности {2, 2, 3, 10 000} медианой могло бы быть любое число из интервала (2, 3).
Для определенности в случае четного количества членов
медианой считается среднее арифметическое двух средних значений.
Ваша задача — для данной последовательности целых
чисел вывести ее медиану.
Формат входных данных
В первой строке входного файла задано целое число n
(1 6 n 6 5 000). Во второй строке заданы через пробел n
целых чисел a1 , a2 , . . ., an (1 6 ai 6 109 ).
Имя входного файла:
inverse.in
Имя выходного файла:
inverse.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
Напишите программу, которая для заданного массива
A = ha1 , a2 , . . . , an i находит количество пар (i, j) таких,
что i < j и ai > aj .
Формат выходных данных
Формат входных данных
Примеры
Первая строка входного файла содержит натуральное
число n (1 6 n 6 50 000) — количество элементов массива.
Вторая строка содержит n попарно различных элементов
массива A.
Формат выходных данных
В выходной файл выведите одно число — ответ на задачу.
Примеры
inverse.in
4
1 2 4 5
4
5 4 2 1
В первой строке выходного файла выведите единственное вещественное число — медиану последовательности с
точностью до шести знаков после запятой.
median.in
5
1 2 5 7 3
4
2 2 3 10000
5
10 100 10 1000 10
median.out
3
2.5
10
Задача D. Минимаксное преобразование
inverse.out
0
6
Задача C. Медиана последовательности
Имя входного файла:
median.in
Имя выходного файла:
median.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
В теории вероятностей и статистике часто рассматриваются конечные последовательности чисел. Иногда для
Имя входного файла:
minimax.in
Имя выходного файла:
minimax.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
Рассмотрим набор чисел a1 , a2 , . . ., an . Минимаксным
преобразованием этого набора по модулю p назовём следующую операцию: найдём минимум amin и максимум amax
в наборе, удалим их из него, а вместо них добавим число
(amin + amax ) mod p.
Дан набор из n чисел. Над ним последовательно n − 1
раз производят минимаксное преобразование. Выведите
те числа, которые были добавлены в набор, в порядке их
добавления.
Страница 1 из 4
Кружок обучения мастерству программирования при СПбГУ, группа B2
Первое занятие: сортировка, пятница, 1 октября 2010 года
Формат входных данных
Примеры
Набор чисел задан генератором. В первой строке входного файла заданы через пробел три целых числа n, b и
p (2 6 n 6 100 000, 1 6 b < p 6 109 ). Числа исходного
набора получаются как ai = bi mod p.
Формат выходных данных
В первой строке выходного файла выведите n − 1 число — те числа, которые были добавлены в набор в результате минимаксных преобразований, в порядке их добавления.
Примеры
minimax.in
3 2 5
4 2 1000
minimax.out
1 4
18 22 30
3
1
1
2
4
4
3
2
3
orderstatistic.in
1
2 3
2 3
2
9
2
2
2 2
4 5
orderstatistic.out
1/2 1/3 1/1
9/4 9/2
1/2 1/2 1/2
Задача F. Устойчивая сортировка
пар
Имя входного файла:
pairs.in
Имя выходного файла:
pairs.out
Ограничение по времени:
2 секунды
Имя входного файла:
orderstatistic.in
Ограничение по памяти:
256 Мебибайт
Имя выходного файла:
orderstatistic.out
В
этой
задаче
нужно
отсортировать
пары чисел, заданОграничение по времени:
2 секунды
ных
во
входном
файле.
Зададим
устойчивый
порядок на
Ограничение по памяти:
256 Мебибайт
парах следующим образом. Пусть (ai , bi ) и (aj , bj ) — две
В этой задаче требуется уметь быстро находить k-ю
пары из исходной последовательности, i, j — номера этих
порядковую статистику последовательности — то есть
пар.
элемент, который после сортировки этой последовательПара (ai , bi ) считается меньше пары (aj , bj ) в двух слуности по неубыванию будет стоять в ней на k-м месте.
чаях:
Есть две замкнутые в кольцо ленты, на каждой из которых записана последовательность чисел: числа a1 , a2 ,
1. если ai < aj ,
. . ., an на первой ленте и числа b1 , b2 , . . ., bn на второй.
2. если ai = aj и i < j.
Назовём p-м циклическим cдвигом положение, в котором
a1 находится над bp+1 , a2 над bp+2 , . . ., an−p над bn , an−p+1
Таким образом, требуется отсортировать последованад b1 , . . ., an−1 над bp−1 и an над bp . Рассмотрим послетельность пар так, чтобы первые числа пар были расподовательность дробей
ложены в неубывающем порядке, и при этом сортировка
была устойчивой.
a1
a2
an−p an−p+1
an−1 an
,
, ...,
,
, ...,
,
bp+1 bp+2
bn
b1
bp−1 bp
Формат входных данных
Задача E. Порядковые статистики
и обозначим k-ю порядковую статистику этой последова(p)
тельности как sk .
По данным числам на лентах, а также числу k, найдите
(1)
(2)
(n)
последовательность sk , sk , . . ., sk .
Формат входных данных
В первой строке входного файла задано целое число n
(1 6 n 6 5 000). В следующих n строках заданы через
пробел по два целых числа, ai и bi (1 6 ai , bi 6 109 ).
Формат выходных данных
В первых n строках выходного файла выведите пары
чисел ai bi , разделенных пробелом, в требуемом порядке.
В первой строке входного файла заданы через пробел
два целых числа n и k — размер лент и номер порядко- Примеры
pairs.in
вой статистики (1 6 k 6 n 6 5000). Во второй строке
3
записаны n чисел a1 , a2 , . . ., an — содержимое ленты с
1 2
числителями (1 6 ai 6 109 ). В третьей строке записаны n
3 1
чисел b1 , b2 , . . ., bn — содержимое ленты со знаменателями
9
1 1
(1 6 bi 6 10 ).
4
Формат выходных данных
4 1
В первой строке выходного файла выведите n чисел че3 2
(1) (2)
(n)
рез пробел — k-е порядковые статистики sk , sk , . . ., sk .
2 2
Каждое число должно быть представлено в виде несокра3 3
тимой дроби.
Страница 2 из 4
pairs.out
1 2
1 1
3 1
2
3
3
4
2
2
3
1
Кружок обучения мастерству программирования при СПбГУ, группа B2
Первое занятие: сортировка, пятница, 1 октября 2010 года
Задача G. Сортировка различных Пример
product.in
чисел
Имя входного файла:
permut.in
Имя выходного файла:
permut.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
В этой задаче нужно отсортировать последовательность натуральных чисел, заданных во входном файле,
при условии, что числа в последовательности не повторяются, и максимальное из этих чисел не превосходит длины последовательности.
Формат входных данных
В первой строке входного файла задано натуральное
число n (1 6 n 6 1 000 000). Во второй строке заданы через пробел n натуральных чисел a1 , a2 , . . ., an
(1 6 ai 6 n).
Формат выходных данных
В первой строке выходного файла выведите через пробел n чисел — числа ai в неубывающем порядке.
Пример
permut.in
2
2 1
permut.out
1 2
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1
product.out
Case #1: -25
Case #2: 6
Задача I. Сортировка большой последовательности
Имя входного файла:
sort.in
Имя выходного файла:
sort.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
В этой задаче нужно отсортировать числа, заданные
во входном файле.
Формат входных данных
В первой строке входного файла задано целое число n
(1 6 n 6 300 000). Во второй строке заданы через пробел
n целых чисел a1 , a2 , . . ., an (1 6 ai 6 1000).
Формат выходных данных
Задача H. Скалярное произведение
В первой строке выходного файла выведите через пробел n чисел — числа ai в неубывающем порядке.
Примеры
Имя входного файла:
product.in
Имя выходного файла:
product.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 мебибайт
Дано два вектора: v1
=
(x1 , x2 , . . . , xn ) и
v2 = (y1 , y2 , . . . , yn ). Скалярным произведением этих
векторов называется значение, вычисляемое по формуле:
x1 y1 + x2 y2 + . . . + xn yn .
Разрешено переставлять координаты каждого из векторов любым образом. Выберите такие их перестановки,
чтобы скалярное произведение двух полученных векторов было минимальным и выведите его значение.
1 6 n 6 800. −100 000 6 xi , yi 6 100 000.
sort.in
3
1 2 3
4
3 2 2 1
5
10 100 10 1000 10
sort.out
1 2 3
1 2 2 3
10 10 10 100 1000
Задача J. Ленивый работник
Имя входного файла:
worker.in
Имя выходного файла:
worker.out
Ограничение по времени:
2 секунды
Ограничение по памяти:
256 Мебибайт
Формат входных данных
Трактир «Не дай себе просохнуть!» взял на работу ноПервая строка входного файла содержит единственное вого работника — кладовщика. У кладовщика есть две
целое число t — количество наборов тестовых данных. обязанности. Первая — принимать от грузчиков бочки с
Далее следуют сами наборы, по три строки в каждом. пивом и закатывать их в подвал. Вторая — когда в бочПервая строка тестового набора содержит единственное ке у трактирщика не остаётся пива, выкатывать ему из
целое число n. Две следуюшие строки содержат по n це- подвала новую бочку, в которой пиво ещё имеется.
лых чисел, задающих координаты соответствующего векХитрый работник скоро понял, что в разных бочках,
тора, каждая.
попадающих к нему в подвал, содержится различное количество пива, и решил впредь всегда выкатывать тракФормат выходных данных
Для каждого набора выведите строку с номером этого тирщику ту бочку, в которой пива менее всего, чтобы
набора и ответом на задачу — значением минимального особо не напрягаться. Дальновидность не в характере
скалярного произведения. Следуйте формату, указанно- лентяя-кладовщика, и то обстоятельство, что позднее ему
придётся катать исключительно тяжёлые бочки, равно
му в примере.
как и то, что лёгкие бочки нужно катать чаще, он проигнорировал.
При получении бочки от грузчиков кладовщик измеряет количество пива в ней. Количество пива обозначается
целым числом от 0, когда бочка пуста, до 1000, когда вся
Страница 3 из 4
Кружок обучения мастерству программирования при СПбГУ, группа B2
Первое занятие: сортировка, пятница, 1 октября 2010 года
бочка заполнена пивом. Известно, что грузчики не пере- Примеры
дают кладовщику пустых бочек.
worker.in
Трактирщик узнал о том, какую хитрость придумал
3
его новый ленивый работник, и теперь, зная количество
1
пива во всех привозимых грузчиками бочках, хочет вы2
яснить, сколько пива будет в каждой следующей бочке,
0
которую кладовщик выкатит из подвала.
5
По последовательности поступлений бочек в подвал и
3
выкатываний их трактирщику установите, сколько пива
0
было в каждой выкаченной бочке.
2
0
Формат входных данных
1
В первой строке входного файла задано число N
(1 6 N 6 100 000). Следующие N строк содержат по од6
ному числу Ai в каждой и описывают события в порядке,
8
в котором они происходят. Если Ai больше нуля, то это
4
означает поступление в подвал новой бочки, количество
2
пива в которой равно Ai . Если же Ai равно нулю, то опи1
сываемое данной строкой событие — это выкатывание из
0
подвала бочки, пива в которой осталось менее всего.
0
Изначально можно считать, что в подвале бочек с пи4
вом нет. Гарантируется, что трактирщик не попадёт в си1
туацию, когда на его запрос кладовщик не может выка1
тить новой бочки.
1
0
Формат выходных данных
10
На каждое выкатывание бочки из подвала выведите
4
строку, состоящую из единственного числа Bj — сколько
3
пива содержалось в выкаченной бочке.
7
4
9
5
6
0
0
0
Страница 4 из 4
worker.out
1
3
2
1
2
1
3
4
4
Download