Программирование и не только

Объявление


!!

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование и не только » Delphi, Kylix, Pascal » Олимпиадные задачи


Олимпиадные задачи

Сообщений 1 страница 10 из 10

1

Вот, решил выложить несколько задачек, которые сам решал на Олимпиаде.

#1 Счастливый билет

Номер билета представляет собой шестизначное число в диапазоне от 000001 до 999999. Счастливым является тот билет, у которого сумма первых трех чисел равна сумме последних трех. Найти все билеты, у которых номера являются счастливыми (123321, 316505)
Выходные данные:
В выходной файл output.txt должны быть занесены все "счастливые билеты".

#2 Двоичная сумма

Даны две последовательности, содержащие только нули и единицы, и образующие запись двух восьмизначных двоичных чисел P и Q.
Создать программу для получения значений третьей последовательности нулей и единиц, содержимое которой отвечало бы значению суммы чисел P и Q.
Входные данные:
Входной файл input.txt содержит в первой и втрой строках последовательности 8 нулей и единиц.
Выходные данные:
В выходной файл output.txt должна быть занесена последовательность нулей и единиц, отвечающая условию задачи.
Пример:
Input.txt         output.txt
01010110       100000011
11001101

#3 Квадраты

Бесконечная последовательность цифр составлена из записанных друг за другом квадратов всех натуральных чисел, начиная с единыцы: 149162536...(1^2=1, 2^2=4, 3^2=9, 4^2=16...). Требуется определить, какая цифра находится на k-м месте в этой последовательности.
Входные данные:
В первой строке входного файла input.txt находится одно натуральное число k - номер позиции в последовательности. Известно, что k < 2^31.
Выходные данные:
В выходной файл output.txt следует вывести цифру, которая находится в описанное выше последовательности на позиции с номером k.
Пример:
Input.txt                   Output.txt
3                              9
9                              6
13                             4

#4 Покупки

Мама дала сыну S рублей и попросила купить к чаю один батон хлеба, пачку масла и порцию сыра. В магазине осталось M сортов хлеба, N сортов масла и R сортов сыра. Цены на различные сорта продуктов различны. Хватит ли сыну денег на покупки, если он решит купить себе порцию мороженного, стоимость которого не более А рублей. Если денег хватит, то необходимо указать все варианты покупок.
Входные данные:
В первой строке входного файла input.txt находятся два числа, S - сумма денег, A - стоимость мороженого, во второй строке - натуральное число М (число сортов хлеба), а третьей - М чисел (цена каждого сорта хлеба), в четвертой - натуральное число N (число сортов масла), в пятой N чисел (цена пачки каждого сорта масла), в шестой - натуральное число К (число сортов сыра), в седьмой - К чисел (цена порции каждого сорта сыра)
Выходные данные:
В первую строку выходного файла output.txt следует ввести число P вариантов покупки. Если P>0, то в каждую из следующих P строк - три числа: Стоимость батона хлеба, паски масла, порции сыра .
Пример:
Input.txt                   Output.txt
100 12                      6
2                              9 19 43
15 9                          9 19 59
3                              9 26 43
26 19 35                   9 35 43
2                              15 19 43
43 59                        15 26 43

Чтобы проверить правильность решения задачи, Вам следует пройти тесты. Я напишу входные данные, а вы напишите выходные, которые у вас получились.

#2

Номер теста                      Входные данные
1                                       11111111
                                         00000000
 
2                                       11111111
                                         00000001 

3                                       11111111
                                         11111111

#3

Номер теста                      Входные данные
1                                      1   
2                                      50
3                                      255

#4

Номер теста                      Входные данные
1                                       3 3
                                         1
                                         12
                                         1
                                         23
                                         1
                                         35

2                                       50 5
                                         2
                                         12 15
                                         2
                                         23 26
                                         2
                                         56 48

+2

2

Интернет-провайдер
Тур I, задача 2

В связи с большой популярностью использования информационно-коммуникационных средств в настоящее время появилось множество компаний, называемые «провайдерами», которые предоставляют услуги доступа в Интернет.
Для доступа в Интернет  провайдером используется мощный сервер. Вся работа сервера заключатся в последовательной обработке получаемых от клиента запросов. Сервер позволяет обрабатывать запросы трех следующих типов:
• Установка соединения. Обозначатся символом “<”(ASCII 60) и обозначает момент начала работы  клиента с сервером.
• Разрыв соединения. Обознается символом “>”(ASCII 62) и обозначает момент окончания работы клиента с сервером.
• Информационный запрос. Обозначается “#”(ASCII 35) и обозначает обычный информационный запрос клиента, например, запрос какого-либо сайта.
Сессией называется определенная последовательность запросов, состоящая  не менее чем из двух элементов. Первым элементом в этой последовательности является запрос типа “Установка соединения”, последним  –  является запрос типа “Разрыв соединения”, остальные  элементы последовательности, если таковые имеются, могут быть только запросами типа “Информационный запрос”. У каждого запроса есть время его поступления. Длительностью сессии называется время между поступлением запроса “Установка соединения” и запросом типа “Разрыв соединения”.  Всю работу клиента с сервером можно описать в виде определенной последовательности непересекающихся по времени сессий. Будем считать, что сессии пересекаются по времени, если существует промежуток  времени положительной длительности, который принадлежит как отрезку времени, соответствующему первой сессии, так и  принадлежит отрезку времени, соответствующему второй сессии.
На стороне сервера ведется база данных запросов, в которой для каждой учетной записи соответствующего клиента отмечается время и тип запроса. По этой информации без труда можно установить последовательность сессий для каждой учетной записи. В конце дня для каждой учетной записи подсчитывается время работы, за которое клиенту придется финансово рассчитаться с провайдером. Время работы клиента в Интернете определяется суммой длительностей всех сессий данного клиента.
Однажды системные администраторы провайдера заметили, что их сервер был атакован коварным вирусом. Вирус быстро удалось обезвредить, но навредить он все же успел. Вирус проник в базу данных  запросов и для некоторых записей запросов удалил их типы. На экстренном совещании руководства было принято решение о разработке программы, которая позволит восстановить типы запросов для поврежденных записей. Однако, как оказалось, не всегда можно однозначно восстановить тип запроса, а соответственно и время работы клиента. В этом вопросе генеральный директор был непреклонен – в случае неоднозначности программа должна восстановить типы запросов таким образом, чтобы время работы соответствующего клиента в Интернете  было минимальным. Вашей задачей является написать необходимую программу.     
Входные данные
В первой строке входного файла находится одно целое число N (2 ≤ N ≤ 32767) – количество запросов в базе данных для данной учетной записи.
Следующие N строк входного файла описывают последовательность запросов в хронологическом порядке, то есть в порядке их поступления. Каждая строка  входного файла описывает  ровно один запрос. Каждый запрос описывается двумя строковыми величинами, разделенными одним пробелом. Первая строковая величина  определяет время поступления запроса в формате hh:mm:ss:ttt, где hh – число из двух цифр от 00 до 23, определяющее количество часов;  mm – число из двух цифр от 00 до 59, определяющее количество минут; ss – число из двух цифр от 00 до 59, определяющее количество секунд; ttt – число из трех цифр от 000 до 999, определяющее количество милисекунд. Пробельные символы в описании времени не допускаются. Вторая строковая величина в описании запроса состоит ровно из одного символа и описывает тип запроса. Если строка, описывающая тип запроса, состоит из  символа “?”(ASCII 63),  то тип данного запроса был удален вирусом. Не существует двух запросов с одинаковым временем поступления.
Выходные данные
Выходной файл должен содержать ровно одну строку – минимальное время работы клиента в Интернете в соответствующем формате hh:mm:ss:ttt.
Гарантируется, что решение существует.

input.txt output.txt
2
00:00:00:000 ?
23:59:59:999 ?
23:59:59:999
3
08:00:00:000 ?
08:15:00:000 #
09:00:00:017 > 01:00:00:017
5
14:10:00:001 <
14:15:30:000 ?
14:20:00:002 ?
16:17:32:904 ?
17:20:08:147 ? 01:12:35:244

0

3

Кубики
Тур I, задача 3

Как-то раз родители в день рождения подарили Вове набор кубиков. Родители, прекрасно зная изобретательность своего сына, были уверены, что подарок придется по душе их чаду. Так и оказалось – Вове давно уже надоели обычные игрушки, потому как они, по его мнению, не давали должного пространства для изобретения своих игр и головоломок, чего нельзя было сказать о наборе кубиков.
Не долго думая, Вова стал выстраивать в своей комнате последовательность из столбиков, где столбик – это некоторое положительное количество кубиков, поставленных друг на друга. Другими словами, столбик – это последовательность кубиков не нулевой длины, где первый кубик является основанием, а каждый следующий, начиная со второго, ставится наверх предыдущего. На рисунке ниже изображена последовательность из пяти столбиков.

На базе получившийся модели Вова быстро придумал занимательную игру для одного игрока. За один ход игроку разрешается либо увеличить высоту любого из существующих столбиков последовательности на единицу, добавив в столбик новый кубик, либо уменьшить высоту столбика, состоящего более, чем из одного кубика, убрав из него один кубик. Игра продолжается до тех пор, пока в последовательности столбиков не окажется  M одинаковых по высоте в подряд стоящих столбиков. Будем считать, что количество кубиков в подаренном Вове наборе велико и не может случиться так, что для совершения хода не окажется необходимого  кубика. Ваша задача состоит в том, чтобы по заданной последовательности кубиков и заданного числа M определить минимальное количество ходов, которое придется сделать игроку для успешного завершения  игры.
Для приведенного выше примера при M = 3 достаточно двух ходов – увеличить высоту второго столбика на единицу и уменьшить высоту третьего на единицу, тогда получим, что столбики с номерами 2, 3 и 4 имеют одинаковую высоту 4.
Входные данные
В первой строке через один пробел заданы два целых числа – N и M                                    (1 ≤ M ≤ N ≤ 200000), где   N – количество столбиков в последовательности.
Следующая строка входного файла содержит N натуральных чисел Hi (1 ≤ Hi ≤ 109), разделенных одиночными пробелами – высота соответствующего столбика в последовательности.
Выходные данные
В первой и единственной строке выходного файла должно находиться одно целое число – минимальное количество ходов, которые необходимо сделать игроку, чтобы получить из заданной последовательности столбиков другую последовательность с M подряд стоящими столбиками одинаковой высоты.

input.txt output.txt
5 3
2 3 5 4 1 2
7 4
3 19 3 15 8 14 5 16

0

4

Криптомания
Тур II, задача 1

С каждым днем все большую популярность приобретают цифровые средства связи, а в эпоху бурных информационных процессов огромную популярность приобретают средства связи с защищенным каналом связи, то есть протоколы, пресекающие попытки несанкционированного доступа к данным. В связи с этим появилось множество алгоритмов шифрования данных с разными характеристиками, некоторые из них просты и нетребовательны касательно ресурсов, некоторые же наоборот – сложны для взлома, но одновременно и ресурсоемки.
Недавно одна компания “X” разработала принципиально новый алгоритм шифрования данных, который практически невозможно взломать, но и одновременно абсолютно не ресурсоемкий. Все шифрование строится на симметричном K-ключе, то  есть на числе, в двоичной записи которого ровно K единиц. Все принципиальное отличие от  предыдущих алгоритмов заключалось в том, что ключ не был одним и тем же на все время соединения, а менялся после некоторых определенных интервалов времени на другой K-ключ. Также одной из особенностей разработанного алгоритма была необходимость того, чтобы каждый следующее число, соответствующее K-ключу, было больше предыдущего. Более того, специалисты компании установили, что для увеличения помехоустойчивости разница между следующим K-ключом и предыдущим K-ключом должна быть минимальна. Под разницей K-ключей понимается абсолютная разница соответствующих им чисел.
Вы работаете в этой компании, и Вам предстоит разработать алгоритм получения из исходного K-ключа следующего K-ключа в соответствии со всеми описанными выше требованиями.
Входные данные
В первой и единственной строке входного файла находится одно натуральное число     N (1 ≤ N ≤ 1018)  –  соответствующий K-ключ.
Выходные данные
В первой и единственной строке выходного файла должно находится одно натуральное число –  следующий K-ключ за соответствующим K-ключом N.

input.txt output.txt
2 4
22 25
1536 2049

0

5

Летний отпуск
Тур II, задача 2

Прошло много лет, после того как Шрек согласился стать королем Тридевятого царства. Эта работа оказалась поистине выматывающей и порой неблагодарной. И вот наконец за все время правления настал период затишья: не было безотлагательных государственных дел и встреч. Этот период времени совпал с самым жарким месяцем лета – июлем. Шрек решил взять отпуск и съездить со своей избранницей в свой родной лес. 
Все сказочные персонажи, населяющие лес, настолько были рады приезду Шрека, что устроили пир на всю округу. Во время пира Шрек с Фионой решили организовать занимательный аттракцион. Для этого они начертили прямую дорожку длиной N+1 метров и шириной в один метр и разбили ее условно на  N+1 клеток. Каждой клетке соответствовал 1 м2 исходной дорожки. Клетки последовательно пронумеровали числами от 0 до N. Для игры используются волшебные кузнечики, которых в этом лесу было очень много. Каждый кузнечик характеризуется целым числом – расстоянием, на которое он прыгает за один прыжок. Как оказалось, для любого натурального числа найдется как минимум два кузнечика, длина прыжка которых равна этому числу. Игра предназначена для двух игроков и проходит следующим образом.
Первый игрок выбирает себе кузнечика и ставит его в клетку с номером ноль. После этого кузнечик начинает прыгать по дорожке (в соответствии со своим расстоянием прыжка) от клетки с меньшим номером к клетке с большим номером  до тех пор, пока есть клетка, в которую он может прыгнуть. Если окажется, что кузнечик не попал в клетку с номером N, то считается, что первый игрок проиграл. Если первый кузнечик попал в клетку с номером N, то далее второй игрок выбирает себе кузнечика и ставит его в клетку с номером ноль. Если после прыжков второй кузнечик не попадает в клетку с номером N, то считается, что проиграл второй игрок. Хотелось бы отметить, что кузнечики очень чувствительны и если в какой-то момент кузнечик второго игрока окажется в клетке, где был кузнечик первого игрока, то кузнечик перестает прыгать и игрокам приходится повторить попытку, начав игру с начала, исключением является клетка с номером ноль. Игра продолжается до тех пор, пока либо не проиграет один из игроков, либо оба кузнечика окажутся в клетке с номером N, что считается ничьей.
Шрек и Фиона решили открыть чемпионат по этой игре. Чтобы не напрягать обстановку, было решено сыграть вничью с первой попытки. Будучи галантным, Шрек предоставил Фионе право начать игру первой. Она очень умна и выбрала кузнечика, характеризующегося такой длиной прыжка  К, при котором он точно попадал в клетку с номером N. Для того чтобы игра закончилась вничью с первой попытки, Шреку необходимо выбрать кузнечика, характеризующегося такой длиной прыжка, при которой  кузнечик однозначно попал бы в клетку с номером N и не оказался в клетке, в которой был кузнечик Фионы. На рисунке ниже изображен вариант успешной игры для N = 12 и K = 3.                   
                                                      (рисунок 1)
На рисунке серым цветом помечены клетки, в  которых был кузнечик Фионы. Зачеркнутые клетки – это клетки, по которым прыгал кузнечик Шрека, если длина прыжка его кузнечика равна 4.
Ваша задача состоит в том, чтобы определить количество различных вариантов выбора кузнечика для соответствующих N и К. Два варианта выбора кузнечика считаются различными, если различны числа соответствующие длине прыжка кузнечика.
Входные данные
В  первой  и   единственной  строке   входного файла находятся два натуральных числа N( 1 ≤ N ≤ 1018) и К (1 ≤ K ≤ 109), разделенные одним пробелом.
Выходные данные
В первой и единственной строке выходного файла должно находиться одно натуральное  число – количество  вариантов выбора кузнечика.

input.txt output.txt
12 4 3
2 2 2
300 12 6

0

6

Чертежник 2.0
Тур II, задача 3

Знаменитая компания по производству программного обеспечения “Gold&Silver Soft”, за многие годы работы хорошо зарекомендовавшая себя в этой сфере, занялась разработкой  в области школьного образования.
Предварительные исследования показали, что на данный момент стоит острая необходимость в разработке либо переработке уже существующих компьютерных исполнителей, одним из которых является исполнитель «Чертежник». После продолжительных обсуждений было решено переработать существующую версию данного исполнителя.
Аналитическим отделом компании было принято решение, что доработка исполнителя будет заключаться в разработке определенного количества независимых модулей, позволяющих существенно расширить пользовательскую и функциональную составляющую программы. Разработка одного из таких модулей была поручена отделу, который вот уже почти два года возглавляет нам небезызвестный Петр Васильевич Колошин, который с детства любит  информатику.
Целью модуля является разработка вспомогательного программного средства для изучения темы по созданию многослойных растровых изображений. Основным объектом в данном модуле является модель экрана, представляющего собой прямоугольное поле размером M пикселей по горизонтали и N по вертикали. Каждый пиксель соответственно имеет свои целочисленные координаты: первая – номер столбца, в котором он находится, а вторая – номер строки. Столбцы нумеруются слева направо начиная с единицы, а строки – сверху вниз начиная с единицы. Каждый слой для простоты обучения является полностью одноцветным прямоугольником с краями, параллельными краям экрана, и уникальным в условиях одной модели цветом. Каждый слой задается при помощи пяти чисел: первые два числа – координаты пикселя левого верхнего угла прямоугольника, следующие два числа – координаты пикселя нижнего правого угла прямоугольника, и последнее число – цвет.
Во время изучения данной темы учащемуся необходимо последовательно друг за другом наложить на экран K слоев (прямоугольников), причем каждый следующий слой может частично или полностью перекрывать предыдущие слои. Последовательность наложения слоев можно описать в виде последовательности команд, где каждая команда – это один слой. Будем называть такую последовательность команд программой. Цвет каждого пикселя получившегося изображения определяется как цвет слоя, которому принадлежит данный пиксель, с максимальным порядковым номером в последовательности команд. Будем считать, что если пиксель не принадлежит ни одному из слоев, то его цвет равен 0.
На рисунке изображен пример полученного изображения после последовательного применения четырех  команд (слоев), белым цветом обозначены пиксели, которые не принадлежат ни одному из слоев:

(Рис 1)
На рисунке видны только три цвета пикселей, хотя слоев четыре. Это свидетельствует о том, что один из слоев был полностью перекрыт слоями, наложенными позднее.
Специалистами отдела было установлено, что получить изображение по программе не составит большого труда,  а вот решить  обратную задачу – по существующему изображению получить программу – у коллектива  Петра Васильевича не получалось. Поэтому начальник отдела просит  наиболее талантливых школьников помочь решить данную задачу. Понимая всю сложность задания, специалистами отдела были отобраны 10 изображений, которые представляют концептуальный интерес для отдела.
Входные данные
Вам предоставляется 10 входных файлов вида inputQ.txt, где Q = 1, 2, ..., 10.
Первая строка каждого из файлов содержит три числа M, N и K, разделенных одиночными пробелами. 
Каждая из N следующих строк содержит ровно M чисел, разделенных одиночными пробелами, каждое из которых представляет собой цвет соответствующего пикселя, и является целым числом от 0 до K, где число ноль свидетельствует о том, что данный пиксель не принадлежит ни одному из слоев.
Выходные данные
Вам необходимо сдать на проверку 10 выходных файлов вида outputQ.txt, где
Q = 1, 2, …, 10. Выходной файл должен содержать последовательность из K команд, выполнив которые получится изображение, заданное в соответствующем входном файле. Если существует несколько решений, то выведите любое.

input0.txt output0.txt
8 7 4
0 0 0 0 0 0 0 0
0 4 4 4 4 4 0 0
0 4 4 4 1 1 1 0
0 4 3 3 3 1 1 0
0 0 3 3 3 1 1 0
0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 2 2 6 4 4
4 4 7 5 2
5 3 7 6 1
3 4 5 5 3

+1

7

Вот почему Я никогда не любил олимпиадные задачи, пока прочитаешь вся логика портится!

Отредактировано kommunist (2008-01-08 12:43:05)

0

8

А я вообще не люблю олимпиадные задачи!
Я случайно прошел районную олимпиаду и так расстроился что придется еще участвовать на городской!
Но там я занял 45 место из 52!!Для меня это большое достижение!!!!!
во первых я там был почти самым младшим а во вторых я этими задачами токо 2 месяца занимаюсь и то раз в неделю.

0

9

Да, Олимпиадные задачи - Жесть!!!
Я районную прошел, потом на областную заставили ехать... А там такие задачки, ппц............. Первый тур был еще терпим, а со второго я ваще ничего не решил....

0

10

У нас ваще прикол. Городская олимпиада проводилась в 2 тура. В первом отбирали тех кто умеет программировать (нормально). Писали проги на бумашках.  Это нужно было для того чтоб отобрать 20 человек и посадить из за компы в одном кабинете :). я занял 3 место. А когда писали проги на компах, это ваще жесть (кому нужны эти задачи пишите). Задачи 1 и 2 сделали почти все, и задачю 3 сделало человека 3, а задачи 4 и 5 НИКТО !!! Я занял 4 место, но на область меня не взяли :(. Брали токо 1 и 2 место, а 3 это ещё спорно было.
Вот такая вот история :).

0


Вы здесь » Программирование и не только » Delphi, Kylix, Pascal » Олимпиадные задачи