Учебно-тренировочные сборы по информатике, Москва, школа 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