Тренировка S05

Время тестирования приведено для Intel Celeron 400.
Решения должны быть представлены на Turbo Pascal 7.0. Объём памяти, предоставляемый программе, составляет 500 кб.


        Задача A. Дружественные числа

Два различных натуральных числа называются дружественными, если первое из них равно сумме делителей второго числа, за исключением самого второго числа, а второе равно сумме делителей первого числа, за исключением самого первого числа. Требуется найти все пары дружественных чисел, оба из которых принадлежат промежутку от M до N.
Ограничения: 1 <= M <= N <= 1 000 000, все числа целые, время 1 с.
Ввод из файла friendly.in. В первой строке находятся числа M и N.
Вывод в файл friendly.out. В каждой строке вывести по паре чисел через пробел. Первое число пары должно быть меньше второго. Строки должны быть отсортированы в порядке возрастания первого числа пары. Если пар дружественных чисел в промежутке нет, вывести "Absent".
Примеры
Ввод 1      Ввод 2      Ввод 3
200 300     200 250     185000 205000
Вывод 1     Вывод 2     Вывод 3
220 284     Absent      185368 203432
                        196724 202444
Комментарий к примеру 1
220=1+2+4+71+142 (все делители числа 284);
284=1+2+4+5+10+11+20+22+44+55+110 (все делители числа 220).

        Задача B. Скобки (2)

Вывести все правильные скобочные выражения длиной N, состоящие из круглых и квадратных скобок.
Ограничения: 1 <= N <= 14, N - чётное, время 2 с.
Ввод из файла bracket2.in. В первой строке находится единственное число N.
Вывод в файл bracket2.out. Каждое выражение выводится в отдельной строке.
Примеры
Ввод 1
4
Вывод 1
(())
[[]]
[()]
()[]
[]()
()()
([])
[][]

        Задача C. Маршрут (2)

Дана матрица NxN, заполненная положительными числами. Путь по матрице начинается в левом верхнем углу. За один ход можно пройти в соседнюю по вертикали или горизонтали клетку (если она существует). Нельзя ходить по диагонали, нельзя оставаться на месте. Требуется найти максимальную сумму чисел, стоящих в клетках по пути длиной K (клетку можно посещать несколько раз).
Ограничения: 2 <= N <= 100, элементы матрицы имеют значения от 1 до 9999, 1 <= K <= 2000, все числа целые, время 5 с.
Ввод из файла route2.in. В первой строке находятся разделенные пробелом числа N и K. Затем идут N строк по N чисел в каждой.
Вывод в файл route2.out. Вывести одно число - максимальную сумму.
Примеры
Ввод 1
5 7
1 1 1 1 1
1 1 3 1 9
1 1 6 1 1
1 1 3 1 1
1 1 1 1 1
Вывод 1
21

        Задача D. Выпуклая оболочка

На плоскости заданы N точек своими декартовыми координатами. Найти минимальный периметр многоугольника, содержащего все эти точки. Гарантируется, что искомый многоугольник имеет ненулевую площадь.
Ограничения: 3 <= N <= 1000, -10 000 <= xiyi <= 10 000, все числа целые, все точки различны, время 2 с.
Ввод из файла conhull.in. В первой строке находится число N, далее - N строк с парами координат.
Вывод в файл conhull.out. Вывести одно число - длину периметра с одним знаком после запятой.
Примеры
Ввод 1
5
1 0
0 1
-1 0
0 -1
0 0
Вывод 1
5.7

        Задача E. Системы счисления

Дано целое неотрицательное число в I-ричной системе счисления. Вывести это число в J-ричной системе счисления.
Ограничения: 2 <= IJ <= 36, для представления цифр 10...35 используются прописные латинские буквы A...Z соответственно, число разрядов исходного числа не превышает 1000, время 5 с.
Ввод из файла scale.in. В первой строке находятся числа I и J (в десятичной системе счисления), во второй строке - число для перевода.
Вывод в файл scale.out. Вывести искомое число. Если число начинается с буквы, перед ней не должно быть нуля.
Примеры
Ввод 1
10 36
29234652
Вывод 1
HELLO

        Задача F. День рождения

Заданы день и месяц рождения, а также текущие день, месяц и год. Определить, сколько дней осталось до дня рождения.
Примечание. Високосные годы - это те, номер которых делится на 400, а также те, номер которых делится на 4, но не делится на 100.
Ограничения: год от 1920 до 3000, месяц - от 1 до 12, день - от 1 до числа дней в месяце, время 1 с.
Ввод из файла birthday.in. В первой строке находятся разделённые пробелами день и месяц рождения, во второй - разделённые пробелами текущие день, месяц и год.
Вывод в файл birthday.out. Вывести число дней, оставшихся до дня рождения.
Примеры
Ввод 1       Ввод 2       Ввод 3
19 04        05 05        29 02
19 04 2002   19 04 2002   28 02 2001
Вывод 1      Вывод 2      Вывод 3
0            16           1096
Hosted by uCoz