Задачи олимпиады "Краевая Всероссийская олимпиада школьников Красноярского края по информатике"
Задача A. Черно-белая графика
(Время: 1 сек. Память: 16 Мб Баллы: 100)
Одна из базовых задач компьютерной графики – обработка черно-белых изображений. Изображения можно представить в виде прямоугольников шириной w и высотой h, разбитых на w×h единичных квадратов, каждый из которых имеет либо белый, либо черный цвет. Такие единичные квадраты называются пикселами. В памяти компьютера сами изображения хранятся в виде прямоугольных таблиц, содержащих нули и единицы.
Во многих областях очень часто возникает задача комбинации изображений. Одним из простейших методов комбинации, который используется при работе с черно-белыми изображениями, является попиксельное применение некоторой логической операции. Это означает, что значение пиксела результата получается применением этой логической операции к соответствующим пикселам аргументов. Логическая операция от двух аргументов обычно задается таблицей истинности, которая содержит значения операции для всех возможных комбинаций аргументов.
Например, для операции «исключающее ИЛИ» эта таблица выглядит так:
Первый аргумент
Второй аргумент
Результат
0
0
0
0
1
1
1
0
1
1
1
0
Требуется написать программу, которая вычислит результат попиксельного применения заданной логической операции к двум черно-белым изображениям одинакового размера.
Входные данные
Первая строка входного файла INPUT.TXT содержит два целых числа w и h (1 ≤ w, h ≤ 100). Последующие h строк описывают первое изображение и каждая из этих строк содержит w символов, каждый из которых равен нулю или единице. Далее следует описание второго изображения в аналогичном формате. Последняя строка входного файла содержит описание логической операции в виде четырех чисел, каждое из которых – ноль или единица. Первое из них есть результат применения логической операции в случае, если оба аргумента – нули, второе – результат в случае, если первый аргумент – ноль, второй – единица, третье – результат в случае, если первый аргумент – единица, второй – ноль, а четвертый – в случае, если оба аргумента – единицы.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести результат применения заданной логической операции к изображениям в том же формате, в котором изображения заданы во входном файле.
Пример
№
INPUT.TXT
OUTPUT.TXT
1
5 3
01000
11110
01000
10110
00010
10110
0110
11110
11100
11110
Задача B. Газон
(Время: 1 сек. Память: 16 Мб Баллы: 100)
Фермер Иван с юности следит за своим газоном. Газон можно считать плоскостью, на которой в каждой точке с целыми координатами растет один пучок травы.
В одно из воскресений Иван воспользовался газонокосилкой и постриг некоторый прямоугольный участок газона. Стороны этого участка параллельны осям координат, а две противоположные вершины расположены в точках (x1, y1) и (x2, y2). Следует отметить, что пучки травы, находящиеся на границе этого прямоугольника, также были пострижены.
Довольный результатом Иван купил и установил на газоне дождевальную установку. Она была размещена в точке с координатами (x3, y3) и имела радиус действия струи r. Таким образом, установка начала поливать все пучки, расстояние от которых до точки (x3, y3) не превышало r.
Все было хорошо, но Ивана заинтересовал следующий вопрос: сколько пучков травы оказалось и пострижено, и полито в это воскресенье?
Требуется написать программу, которая позволит дать ответ на вопрос Ивана.
Входные данные
Первая строка входного файла INPUT.TXT содержит четыре целых числа x1, y1, x2, y2 (−100 000 ≤ x1 < x2 ≤ 100 000; −100 000 ≤ y1 < y2 ≤ 100 000). Во второй строке записаны три целых числа x3, y3, r (−100 000 ≤ x3, y3 ≤ 100 000; 1 ≤ r ≤ 100 000)
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно целое число – число пучков травы, которые были и пострижены, и политы.
Пример
№
INPUT.TXT
OUTPUT.TXT
1
0 0 5 4 4 0 3
14
Задача C. Трамвай
(Время: 3 сек. Память: 16 Мб Баллы: 100)
С окраины в центр города каждое утро по одному маршруту едут в трамвае N человек. За долгое время поездок они достаточно хорошо узнали друг друга. Чтобы никому не было обидно, они захотели решить, кто из них и между какими остановками маршрута должен сидеть, а кто должен стоять. Все остановки пронумерованы от 1 до P.
Один из пассажиров оказался знатоком теории математического моделирования. Он предложил рассмотреть значение суммарного удовлетворения пассажиров. Для каждого i-го пассажира он оценил две величины – ai и bi. Если в течение одного переезда между остановками пассажир сидит, то к суммарному удовлетворению прибавляется ai, если же он стоит, то прибавляется bi.
Всего в трамвае M сидячих мест. Вставать и садиться пассажиры могут мгновенно на любой остановке. Кроме того, некоторые пассажиры предпочитают ехать стоя, даже если в трамвае есть свободные места (для них ai < bi).
Требуется написать программу, которая вычисляет значение максимально достижимого суммарного удовлетворения, если для каждого i-го пассажира известны величины ai и bi, а также номера остановок, на которых он садится и выходит из трамвая.
Входные данные
Первая строка входного файла INPUT.TXT содержит разделенные пробелом три целых числа N, M и P — число пассажиров, число сидячих мест и число остановок на маршруте соответственно (1 ≤ N, M, P ≤ 100 000; 2 ≤ P).
Каждая из следующих N строк содержит информацию об очередном пассажире в виде четырех целых чисел ai, bi, ci, di, где первые два числа определяют вклад в параметр счастья, третье – номер остановки, на которой пассажир садится в трамвай, и последнее – номер остановки, на которой он выходит из трамвая (−106 ≤ ai, bi ≤ 106; 1 ≤ ci < di ≤ P).
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести одно целое число — максимальное суммарное удовлетворение, которого могут добиться пассажиры.
Пример
№
INPUT.TXT
OUTPUT.TXT
1
4 2 4
10 -10 2 3
-1 -3 1 4
6 -6 1 3
7 4 2 4
28
Пояснение к примеру
Максимальное суммарное довольство достигается следующим образом:
На первой остановке входят и садятся второй и третий пассажиры;
На второй остановке входят первый и четвертый пассажиры, второй уступает место первому;
На третьей остановке встают и выходят первый и третий пассажиры, второй и четвертый садятся на их места;
На четвертой остановке выходят второй и четвертый пассажиры.
Задача D. Треугольники - 3
(Время: 2 сек. Память: 16 Мб Баллы: 100)
Петя достаточно давно занимается в математическом кружке, поэтому он уже успел освоить не только правила выполнения простейших операций, но и такое достаточно сложное понятие как симметрия. Для того, чтобы получше изучить симметрию Петя решил начать с наиболее простых геометрических фигур – треугольников. Он скоро понял, что осевой симметрией обладают так называемые равнобедренные треугольники. Поэтому теперь Петя ищет везде такие треугольники.
Напомним, что треугольник называется равнобедренным, если его площадь положительна, и у него есть хотя бы две равные стороны.
Недавно Петя, зайдя в класс, увидел, что на доске нарисовано n точек. Разумеется, он сразу задумался, сколько существует троек из этих точек, которые являются вершинами равнобедренных треугольников.
Требуется написать программу, решающую указанную задачу.
Входные данные
Входной файл INPUT.TXT содержит целое число N (3 ≤ N ≤ 1500). Каждая из последующих строк содержит по два целых числа – xi и yi – координаты i-ой точки. Координаты точек не превосходят 109 по абсолютной величине. Среди заданных точек нет совпадающих.
Выходные данные
В выходной файл OUTPUT.TXT выведите ответ на задачу.
Примеры
№
INPUT.TXT
OUTPUT.TXT
1
3
0 0
2 2
-2 2
1
2
4
0 0
1 1
1 0
0 1
4
Задача E. Клавиатура - 2
(Время: 1 сек. Память: 16 Мб Баллы: 100)
Всем известно, что со временем клавиатура изнашивается, и клавиши на ней начинают залипать. Конечно, некоторое время такую клавиатуру еще можно использовать, но для нажатий клавиш приходиться использовать большую силу.
При изготовлении клавиатуры изначально для каждой клавиши задается количество нажатий, которое она должна выдерживать. Если знать эти величины для используемой клавиатуры, то для определенной последовательности нажатых клавиш можно определить, какие клавиши в процессе их использования сломаются, а какие – нет.
Требуется написать программу, определяющую, какие клавиши сломаются в процессе заданного варианта эксплуатации клавиатуры.
Входные данные
Первая строка входного файла INPUT.TXT содержит целое число N (1 ≤ N ≤ 100) – количество клавиш на клавиатуре. Вторая строка содержит N целых чисел – с1, с2, … , сN, где сi (1 ≤ сi ≤ 100000) – количество нажатий, выдерживаемых i-ой клавишей. Третья строка содержит целое число K (1 ≤ K ≤ 100000) – общее количество нажатий клавиш, и последняя строка содержит K целых чисел pj (1 ≤ pj ≤ N) – последовательность нажатых клавиш.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести N строк, содержащих информацию об исправности клавиш. Если i-ая клавиша сломалась, то i-ая строка должна содержать слово "yes" (без кавычек), если же клавиша работоспособна – слово "no".
Пример
№
INPUT.TXT
OUTPUT.TXT
1
5
1 50 3 4 3
16
1 2 3 4 5 1 3 3 4 5 5 5 5 5 4 5
yes
no
no
no
yes
Задача F. Неправильное сложение
(Время: 1 сек. Память: 16 Мб Баллы: 100)
Володя написал программу, которая складывает в столбик два числа. К сожалению, он не разобрался, как правильно переносить единицу из одного разряда в следующий. Поэтому программа стала выполняться следующим образом. Сначала она складывает последние цифры обоих чисел и записывает результат, как в случае, если он однозначный, так и в случае, если он двузначный. Затем программа складывает предпоследние цифры обоих чисел и результат сложения приписывает слева к результату предыдущего сложения. Далее процесс повторяется для всех разрядов. Если в одном числе цифр меньше, чем в другом, то программа размещает нули в соответствующих разрядах более короткого числа.
Федя хочет доказать Володе, что его способ сложения не обладает свойством ассоциативности. В частности, Федя утверждает, что существуют три числа, для которых важен порядок, в котором их складывают (при этом разрешается складывать числа в любом порядке, например можно сначала сложить первое число и последнее, а затем прибавить к ним среднее). Федя привел даже пример трех таких чисел.
Требуется написать программу, которая поможет Феде и Володе определить, верно ли утверждение, что, складывая заданные три числа в разном порядке, можно получить разные суммы.
Входные данные
Входной файл INPUT.TXT содержит в одной строке три целых числа a, b и c (1 ≤ a, b, c ≤ 106). Все числа в строке разделены пробелом.
Выходные данные
В первую строку выходного файла OUTPUT.TXT необходимо вывести слово YES, если данные три числа можно сложить разными способами и получить разные суммы. В противном случае, необходимо вывести слово NO.
В последующих строках необходимо вывести все возможные суммы, которые можно получить, складывая числа a, b и c. Суммы следует выводить по одной на строке и в порядке их возрастания.
Примеры
№
INPUT.TXT
OUTPUT.TXT
1
30 239 566
YES
7945
71215
2
643 733 553
NO 18129
Задача G. Числа - 2
(Время: 1 сек. Память: 16 Мб Баллы: 100)
Решая задачу по информатике, Вова в очередной раз допустил ошибку. Он снова вывел в выходной файл числа, забыв разделить их пробелами. Увидев полученный результат, Вова сначала огорчился, а потом задумался над следующим вопросом: сколько существует различных последовательностей неотрицательных целых чисел, таких что, если выписать их без пробелов, то получится тот же результат, что и у него. Он вспомнил также, что его программа смогла вывести не произвольные числа, а только те, что не превосходят C и не имеют ведущих нулей.
Чтобы ответить на поставленный вопрос, Вова решил написать программу, которая позволит ему найти число различных последовательностей неотрицательных целых чисел, в каждой из которых любое число не превосходит C. Он понимал, что такое число могло быть достаточно большим, поэтому ограничился поиском только последних K цифр этого числа.
Требуется написать программу, которая покажет Вове, как можно правильно решить поставленную им задачу.
Входные данные
Первая строка входного файла INPUT.TXT содержит три целых числа – N, C и K (1 ≤ N ≤ 50000, 1 ≤ C ≤ 108, 1 ≤ K ≤ 18). Во второй строке этого файла содержится результат работы Вовиной программы, состоящий из N цифр.
Выходные данные
В выходной файл OUTPUT.TXT выведите последние K цифр искомого количества последовательностей без ведущих нулей.
Примеры
№
INPUT.TXT
OUTPUT.TXT
1
3 11 2 111
3
2
19 9 1 0123456789876543210
1
3
1 8 3 9
0
Задача H. Перестановки - 3
(Время: 1 сек. Память: 16 Мб Баллы: 100)
Задано множество из N различных натуральных чисел. Перестановку элементов этого множества назовем K-перестановкой, если для любых двух соседних элементов этой перестановки их наибольший общий делитель не менее K. Например, если задано множество элементов S = {6, 3, 9, 8}, то перестановка {8, 6, 3, 9} является 2-перестановкой, а перестановка {6, 8, 3, 9} – нет.
Перестановка {p1, p2, …, pN} будет лексикографически меньше перестановки {q1, q2, …, qN}, если существует такое натуральное число i (1 ≤ i ≤ N), для которого pj = qj при j < i и pi < qi.
В качестве примера упорядочим все K-перестановки заданного выше множества в лексикографическом порядке. Например, существует ровно четыре 2-перестановки множества S: {3, 9, 6, 8}, {8, 6, 3, 9}, {8, 6, 9, 3} и {9, 3, 6, 8}. Соответственно, первой 2-перестановкой в лексикографическом порядке является множество {3, 9, 6, 8}, а четвертой – множество {9, 3, 6, 8}.
Требуется написать программу, позволяющую найти M-ую K-перестановку в этом порядке.
Входные данные
Входной файл INPUT.TXT в первой строке содержит три натуральных числа – N (1 ≤ N ≤ 16), M и K (1 ≤ M, K ≤ 109). Вторая строка содержит N различных натуральных чисел, не превосходящих 109. Все числа в строках разделены пробелом.
Выходные данные
В выходной файл OUTPUT.TXT необходимо вывести M-ую K-перестановку заданного множества или –1, если такой нет.