Problems

advertisement
Задача A
Каждому по компьютеру!
Имя входного файла:
Имя выходного файла:
Максимальное время работы на одном тесте:
Максимальный объем используемой памяти:
a.in
a.out
3 секунды
64 мегабайта
В новом учебном году на кружки по программированию записались учащиеся, которые были
разбиты на N групп. В i-й группе оказалось Xi человек. Тут же перед директором встала серьезная
проблема: как распределить группы по аудиториям. В здании, где проводятся кружки, имеется M
аудиторий, в j-й аудитории имеется rj компьютеров. Для занятий необходимо, чтобы у каждого учащегося
был компьютер и еще один компьютер был у преподавателя. Переносить компьютеры из одной аудитории
в другую запрещается. Помогите директору!
Напишите программу, которая найдет, какое максимальное количество групп удастся
одновременно распределить по аудиториям, чтобы всем учащимся в каждой группе хватило компьютеров,
и при этом остался бы еще хотя бы один для учителя.
Формат входных данных
На первой строке входного файла расположены числа N и M (1NM1000). На второй строке
расположено N чисел — X1, X2,…, XN (1Xi1000). На третьей строке расположено M чисел — Y1, Y2,…, YM
(1Yj1000).
Формат выходных данных
Выведите на первой строке число P — количество групп, которые удастся распределить по
аудиториям. На второй строке выведите распределение групп по аудиториям — N чисел, i-е число должно
соответствовать номеру аудитории, в которой должна заниматься i-я группа. (Нумерация как групп, так и
аудиторий, начинается с 1). Если i-я группа осталась без аудитории, i-е число должно быть равно 0. Если
допустимых распределений несколько, выведите любое из них.
Пример
a.in
3 4
5 3 4
3 5 3 6
a.out
2
0 2 4
Страница 1 из 6
Задача B
Забавная игра
Имя входного файла:
Имя выходного файла:
Максимальное время работы на одном тесте:
Максимальный объем используемой памяти:
b.in
b.out
3 секунды
64 мегабайта
Учительница математики Мария Ивановна придумала забавную игру с числами. А именно, взяв
произвольное целое число, она переводит его в двоичную систему счисления, получая некоторую
последовательность из нулей и единиц, начинающуюся с единицы. (Например, десятичное число 1910 =
124+023+022+121+120 в двоичной системе запишется как 100112.) Затем она начинает сдвигать цифры
полученного двоичного числа по циклу (так, что последняя цифра становится первой, а все остальные
сдвигаются на одну позицию вправо), выписывая образующиеся при этом последовательности из нулей и
единиц в столбик. Мария Ивановна подметила, что независимо от выбора исходного числа, получающиеся
последовательности начинают с некоторого момента повторяться.
Учительница отыскивает максимальное из выписанных чисел и переводит его обратно в
десятичную систему счисления, считая это число результатом проделанных манипуляций. Так, для числа
19 список последовательностей будет таким:
10011
11001
11100
01110
00111
10011
…
и результатом игры, следовательно, окажется число 124+123+122+021+020 = 28.
Поскольку придуманная игра с числами все больше занимает воображение Марии Ивановны,
отвлекая тем самым ее от работы, вас просят написать программу, которая бы помогла ей получать
результат игры без утомительных ручных вычислений.
Формат входных данных
Входной файл содержит одно целое число N (0N32767).
Формат выходных данных
Ваша программа должна вывести в выходной файл одно целое число, равное результату игры.
Пример
b.in
19
b.out
28
Страница 2 из 6
Задача C
Палиндром
Имя входного файла:
Имя выходного файла:
Максимальное время работы на одном тесте:
Максимальный объем используемой памяти:
c.in
c.out
3 секунды
64 мегабайта
Палиндром — это строка, которая читается одинаково как справа налево, так и слева направо.
Во входном файле записан набор больших латинских букв. Требуется написать программу, которая
из этих букв составит палиндром, а если можно составить несколько палиндромов, то первый в алфавитном
порядке. В палиндроме должны быть использованы все заданные буквы.
Формат входных данных
В первой строке входного файла записано число N (1N100000). Во второй строке записана
последовательность из N больших латинских букв.
Формат выходных данных
В единственной строке выходного файла выдайте искомый палиндром. Если из указанных букв
построить палиндром невозможно, выведите в выходной файл слово IMPOSSIBLE.
Примеры
c.in
3
AAB
6
QAZQAZ
6
ABCDEF
c.out
ABA
AQZZQA
IMPOSSIBLE
Страница 3 из 6
Задача D
Автобусы
Имя входного файла:
Имя выходного файла:
Максимальное время работы на одном тесте:
Максимальный объем используемой памяти:
d.in
d.out
3 секунды
64 мегабайта
В городе, где живет Мария Ивановна, имеется N перекрестков, некоторые из которых соединены
улицами (каждая улица соединяет ровно два перекрестка). В этом городе имеется только один вид
общественного транспорта – автобус. Правда, имеется целых два кольцевых автобусных маршрута.
Маршрут можно задать в виде последовательности перекрестков, по которым он проходит, при
этом после последнего перекрестка автобус едет к первому. В каждом маршруте любой перекресток
встречается не более одного раза.
Марии Ивановне повезло, она живет на единственной улице в городе, по которой ходит оба
маршрута. Выясните, на какой улице живет Мария Ивановна.
Формат входных данных
Первая строка входного файла содержит число N – количество перекрестков в городе, в котором
живет Мария Ивановна (3  N  30000). Следующие две строки содержат описание маршрутов в
следующем формате: сначала идет Ki – количество перекрестков, через которые проходит маршрут (3  Ki 
N), затем перечислены эти перекрестки в том порядке, в котором их посещает автобус соответствующего
маршрута. Числа в строках разделены одним или несколькими пробелами.
Гарантируется, что улица, по которой ходят оба маршрута, существует, и ровно одна.
Формат выходных данных
Выведите в выходной файл номера перекрестков, которые соединяет улица, на которой живет
Мария Ивановна, в возрастающем порядке.
Примеры
d.in
6
6
6
d.out
1 2
1 2 3 4 5 6
1 5 3 6 4 2
Страница 4 из 6
Задача E
Степень
Имя входного файла:
Имя выходного файла:
Максимальное время работы на одном тесте:
Максимальный объем используемой памяти:
e.in
e.out
3 секунды
64 мегабайта
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им
на дом одну и ту же задачу – для заданного натурального A найти минимальное натуральное N такое, что N
в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется
только число A.
Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу,
решающую эту задачу.
Формат входных данных
Во входном файле содержится единственное число A (1≤A≤1000000000 – на всякий случай; вдруг
Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).
Формат выходных данных
В выходной файл вывести единственное число N.
Примеры
e.in
8
13
e.out
4
13
Страница 5 из 6
Задача F
Яблоко от яблони…
Имя входного файла:
Имя выходного файла:
Максимальное время работы на одном тесте:
Максимальный объем используемой памяти:
f.in
f.out
3 секунды
64 мегабайта
У Пети в саду растет яблоня. Воодушевленный историей об Исааке Ньютоне, который, как
известно, открыл закон всемирного тяготения после того, как ему на голову упало яблоко, Петя с целью
повысить свою успеваемость по физике часто сидит под яблоней.
Однако, поскольку по физике у Пети твердая тройка, яблоки с его яблони падают следующим
образом. В какой-то момент одно из яблок отрывается от ветки, на которой оно висит, и начинает падать
строго вниз. Если в некоторый момент оно задевает другое яблоко, то то тоже отрывается от своей ветки и
начинает падать вниз, при этом первое яблоко не меняет направление своего падения. Вообще, если любое
падающее яблоко заденет другое яблоко на своем пути, то оно также начнет падать.
Таким образом, в любой момент каждое яблоко либо висит на ветке, либо падает строго вниз,
причем все яблоки кроме первого, чтобы начать падать, должны сначала соприкоснуться с каким-либо
другим падающим яблоком.
Выясните, какие яблоки упадут с Петиной яблони.
Формат входных данных
Первая строка входного файла содержит N - количество яблок на петиной яблоне (1  N  200).
Следующие N строк содержат описания яблок. Будем считать все яблоки шарами. Каждое яблоко задается
координатами своей самой верхней точки (той, где оно исходно прикреплено к дереву, длиной черенка
пренебрежем) xi, yi и zi и радиусом ri (-10000  xi, yi, zi  10000, 1  ri  10000, все числа целые).
Гарантируется, что изначально никакие яблоки не пересекаются (даже не соприкасаются). Ось OZ
направлена вверх.
Формат выходных данных
Выведите на первой строке выходного файла количество яблок, которые упадут с яблони, если
начнет падать первое яблоко. На следующей строке выведите номера упавших яблок. Яблоки нумеруются,
начиная с 1, в том порядке, в котором они заданы во входном файле.
Пример
f.in
4
0 0 10 4
5 0 3 1
-7 4 7 1
0 1 2 6
f.out
3
1 2 4
Страница 6 из 6
Download