Задача A Точки

advertisement
Учебно-тренировочные сборы по информатике, Москва, школа N179 - Тур N5, 24 марта 2006 года
Задача A
Точки
points.in
Имя входного файла:
points.out
Имя выходного файла:
1 секунда
Ограничение по времени:
64 MB
Ограничение по памяти:
На плоскости заданы N различных точек. Требуется найти количество способов выбрать три
из них, так чтобы площадь треугольника с вершинами в этих точках была целым числом. Будем
считать, что три точки, лежащие на одной прямой, образуют треугольник.
Формат входных данных
Первая строка входного файла содержит число N ( 1  N  10000 ). Далее следуют N пар
целых неотрицательных чисел, задающих координаты точек. Все координаты не превосходят 1000.
Формат выходных данных
Выведите одно число – искомое количество троек точек.
Пример
points.in
4
0
0
2
2
points.out
4
0
2
2
0
1
Учебно-тренировочные сборы по информатике, Москва, школа N179 - Тур N5, 24 марта 2006 года
Задача B
Робот
robot.in
Имя входного файла:
robot.out
Имя выходного файла:
1 секунда
Ограничение по времени:
64 MB
Ограничение по памяти:
Робот движется по полю, которое состоит из N клеток, выстроенных в ряд. На каждой из
клеток находится кубик определенного цвета.
До начала движения робот находится на первой клетке поля и не держит ни одного
кубика. Находясь на клетке, робот может выполнить не более одного раза каждую из следующих
операций: (1) положить кубик того же цвета, который лежит на текущей клетке; (2) поднять с клетки
тот кубик, который находился там сначала. После этого робот перемещается на следующую клетку
или останавливается, если текущая клетка последняя в поле.
Одновременно робот может держать не более K кубиков. На момент остановки робот
не должен держать ни одного кубика.
Напишите программу, которая по информации о цвете кубиков и об ограничении на
количество кубиков, которое может держать робот, определяет максимальное общее количество
кубиков, которое робот может перенести с места на место, двигаясь по полю.
Формат входных данных
Первая строка входного файла содержит символьную строку длины N (1≤N≤1000). Строка
состоит из маленьких букв латинского алфавита. Каждая буква соответствует клетке поля и
определяет цвет кубика, который находится в этой клетке. Вторая строка содержит ограничение на
количество кубиков, которое одновременно может держать робот K (1≤K≤25).
Формат выходных данных
Единственная строка выходного файла должна содержать целое число — максимальное
количество кубиков, месторасположение которых робот может изменить, двигаясь по полю.
Пример
robot.in
robot.out
rgbbggrmcm
2
4
2
Учебно-тренировочные сборы по информатике, Москва, школа N179 - Тур N5, 24 марта 2006 года
Задача C
Арифметические выражения
arithmetic.in
Имя входного файла:
arithmetic.out
Имя выходного файла:
1 секунда
Ограничение по времени:
64 MB
Ограничение по памяти:
Выпускная работа Васи Пупкина в школе развития связана с разработкой обучающей
системы для младших школьников. Вася с жаром взялся за работу. Он решил, что в первую очередь
необходимо разработать модуль, обучающий школьников вычислению арифметических выражений.
Он разработал проект этой программы и понял, что одна из основных его задач – это обновление
арифметических выражений, которые должны вычислять обучающиеся. Ему пришла идея
разделить все арифметические выражения по уровням сложности. При этом в качестве меры
сложности Вася взял длину арифметического выражения. Множество арифметических выражений
заданной длины можно расположить в лексикографическом (алфавитном) порядке, занумеровать
подряд, начиная с номера 1, и случайно выбирать номер арифметического выражения. Очевидно,
что у Васи работы непочатый край, а Вы могли бы ему помочь. Напишите программу, реализующую
идею Васи о генерации арифметических выражений по заданному порядковому номеру.
Определим арифметическое выражение четырьмя правилами:
1) x – это арифметическое выражение,
2) y – это арифметическое выражение,
3) если А и В – это арифметические выражения, то арифметическими выражениями будут:
(А)
(В)
А+В
А*В
4) выражениями считаются только те, которые получены по правилам 1 – 3.
Определим лексикографический порядок для символов, используемых в выражениях
определённых выше, следующим образом: ‘x’ < ‘y’ < ‘(‘ < ‘)’ < ‘*’ < ‘+’. Занумеруем все правильные
записи арифметических выражений заданной длины в соответствии с лексикографическим
(алфавитным) порядком.
Напишите программу, которая по номеру арифметического выражения в заданном
упорядоченном множестве арифметических выражений данной длины выдаёт арифметическое
выражение, соответствующее данному номеру.
Формат входных данных
В первой строке файла записаны через пробел два целых числа N и M (1 N 21) , (1 M
2·10 ) – длина арифметического выражения в множестве и его номер соответственно.
9
Формат выходных данных
В выходной файл нужно вывести арифметическое выражение, которому сопоставлен номер
N в упорядоченном множестве выражений длины М. Если выражение с заданным номером не
существует, то вывести 0.
Пример
arithmetic.in
arithmetic.out
3 5
3 10
y*x
(y)
3
Учебно-тренировочные сборы по информатике, Москва, школа N179 - Тур N5, 24 марта 2006 года
Задача D
Загрузка контейнера
container.in
Имя входного файла:
container.out
Имя выходного файла:
1 секунда
Ограничение по времени:
64 MB
Ограничение по памяти:
Контейнер, имеющий форму прямоугольного параллелепипеда, необходимо загрузить
ящиками. Все ящики имеют кубическую форму и одинаковые размеры, так что ребро куба можно
принять за единицу длины.
Содержимое ящиков имеет разный вес и степень хрупкости, в соответствии с которыми
каждому ящику присвоен целочисленный индекс из интервала от 1 до 9.
Правила загрузки разрешают ставить несколько ящиков друг на друга в том случае, если
каждый ящик несет на себе груз, суммарный индекс которого меньше собственного индекса этого
ящика. Так, поставить „1 на 3 на 7” можно, потому что ящик „7” несет на себе груз суммарного
индекса 4, а ящик „3” – суммарного индекса 1. А вот поставить „1 на 2 на 3 на 8” нельзя, так как ящик
„3” несет на себе груз, суммарный индекс которого равен собственному индексу.
Требуется определить, можно ли загрузить в контейнер указанный набор ящиков без
нарушения правил.
Формат входных данных
Первая строка файла содержит три целых числа L, N, H, определяющих вместимость
контейнера: L – длина основания, N – ширина основания и H – высота (0 ≤ L, N, H ≤ 40000).
Вторая строка содержит 9 чисел, описывающих набор ящиков в следующем порядке: K1 –
число ящиков индекса 1, K2 – число ящиков индекса 2 и т. д. до K9 – числа ящиков индекса 9, причем
K1+…+K9 не превосходит 2·109.
Формат выходных данных
В первой строке файла одно число. Если загрузка возможна, то 1, в противном случае 0.
Пример
сontainer.in
container.out
3 4 3
15 1 0 0 0 0 0 0 0
0
4
Download