Задача А - Физико-математический лицей № 30

advertisement
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача A. Грузчик.
Общая информация:
Имя входного файла: bus.in
Имя выходного файла: bus.out
Лимит времени: 2 секунды.
Условие задачи:
Было время, когда призывник Вася Пупкин подрабатывал скромным грузчиком в магазине, и
каждый день он таскал тяжести, пока наконец его не повысили до Старшего грузчика. На новом
месте Василию было необходимо лишь правильно распределить весь товар по автобусам, каждый из
которых имеет некоторый (для всех автобусов одинаковых) предел вместимости М, поэтому он
решил распределить всю поклажу по кучкам так, чтобы на каждую кучку приходилось по одному
транспортному средству, которое будет его перевозить. Долго не думая наш Старший грузчик
придумал нехитрый алгоритм разделения этих самых кучек, если они слишком большие (т.е. не
влезают в автобус из-за своей вместимости):
1) Если кучка занимает четное количество единиц вместимости (2*N), то Василий разделяет ее
пополам, получая две кучки, занимающих в два раза меньше места относительно исходной (по N
каждая).
2) Если же кучка занимает нечетное количество единиц вместимости (2*N+1), то он также
разделит ее на две кучки, отличающиеся размерами всего лишь на одну единицу (N и N+1
соответственно).
В каждый автобус можно загрузить лишь одну кучку, полученную Василием в ходе его
распределения. Весь товар имеет размер K. Помогите подсчитать, какое минимальное количество
автобусов необходимо ему заказать для того, чтобы перевезти весь груз.
Входные данные:
В первой строке указаны целые числа K < 10000 и M < 10000, соответственно размер товара и
вместимость машины.
Выходные данные:
Целое число — количество машин, которые необходимо заказать Василию.
Пример:
bus.in
14 3
Физико-математический лицей № 30.
bus.out
6
Computer Science Department of Phys-Math Lyceum № 30.
1
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача B. Игра.
Общая информация:
Имя входного файла: game.in
Имя выходного файла: game.out
Лимит времени: 1 секунда.
Условие задачи:
Современные системы высокоточного вооружения стали настолько точны, что войны стали
практически бессмысленными. Вселенский Миротворец рядовой Василий Пупкин выступил с
конструктивным предложением к государствам воюющих стран (которых, по обыкновению, N) –
между руководителями стран разыгрывать игру по следующим правилам
1) На столе лежат N бумажек, на каждой из которых написано по целому числу. Все числа от
1 до N и числа не повторяются. Игроки не видят, какое число написано на бумажке соперников.
2) Каждый игрок тянет по одной бумажке. Игрок, у которого написано меньшее число —
выбывает, и игра продолжается с теми же бумажками (бумажка не возвращается).
3) Игра продолжается пока не останется один игрок. Он и есть победитель — Победитель
Всех Войн, да, и вообще, человек удачливый.
Василий обратился к вам за помощью – он хочет определить, с какой вероятностью будет
выигрывать войну каждое из N государств.
Входные данные:
Целое число 1<= n <= 100.
Выходные данные:
Вывести n вещественных чисел с точностью 6 знаков после запятой, где i-ое число это
вероятность того, что выиграет игрок с номером i.
Пример:
game.in
1
Физико-математический лицей № 30.
game.out
1.000000
Computer Science Department of Phys-Math Lyceum № 30.
2
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача C. Поле испытаний.
Общая информация:
Имя входного файла: table.in
Имя выходного файла: table.out
Лимит времени: 1 секунда.
Условие задачи:
На испытаниях новых типов снарядов наводчику ефрейтор Василию Пупкину было приказано
составить карту дальности полета снарядов в зависимости от типа орудия. Василий, находясь в
штабе, решил составить карту уже в казарме, а на стрельбах заносил записи в виде данных о каждом
орудии и дальности стрельбы каждого снаряда. Т.о. он получил несколько записей в виде строк:
каждая строка соответствует i-ому типу орудия и содержит запись о приращении дальности полета jого снаряда относительно предыдущего (дальность полета первого снаряда измеряется относительно
орудия).
Помогите Василию нарисовать таблицу, которая будет отображать дальности полета всех
снарядов в текстовом виде, исходя из того, что каждая строка состоит из одной или нескольких
ячеек, j-ая ячейка i-ой строки имеет ширину a[i][j].
Входные данные:
Первая строка содержит n (1 <= n <= 100) – количество строк в таблице. Следующие n строк
входного файла содержат описание таблицы.
Описание каждой строки включает число m[i] – количество ячеек этой строки, и m[i] целых
чисел a[i][1], a[i][2],…,a[i][m[i]] – ширину каждой из ячеек строки (1 <= m[i] <= 10, 1 <= a[i][j] <= 10).
Выходные данные:
Выведите таблицу. Изображение i – ой строки таблицы должно начинаться изображением
горизонтальной линии, составленным из символов «+»(плюс) и «-»(минус). Затем должна следовать
строка, содержащая пробелы и символы «|» (вертикальная черта). Первым символом строки должна
быть вертикальная черта. Затем a[i][1] пробелов, затем вертикальная черта, затем a[i][2] пробелов, и
так далее, всего m[i] блоков пробелов.
После последнего блока должна следовать вертикальная черта. После последней строки
таблицы также должно следовать изображение горизонтальной линии. В изображении
горизонтальной линии используйте символ «+», если сверху или снизу этой позиции находится
вертикальная черта, и «-» в противном случае. Горизонтальная линия должна иметь минимальную
возможную длину, чтобы над каждым символом вертикальной черты следующей строки и под
каждым символом вертикальной черты предыдущей строки были символы «+».
Пример:
table.in
4
3 3 5 1
1 2
1 2
2 5 1
Физико-математический лицей № 30.
table.out
+---+-----+-+
|
|
| |
+--++-----+-+
| |
+--+
| |
+--+--+-+
|
| |
+-----+-+
Computer Science Department of Phys-Math Lyceum № 30.
3
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача D. Фронтовая почта.
Общая информация:
Имя входного файла: love.in
Имя выходного файла: love.out
Лимит времени: 1 секунда.
Условие задачи:
Сержант Василий Пупкин, переезжая из одной воинской части в другую, посылает своей
любимой письмо, состоящее из одной строчки «Я старый солдат, и не знаю слов любви!» При этом
следует иметь в виду, что фронтовая почта работает очень специфическим образом – письмо
отправляется на предыдущее место службы лейтенанта, там запечатывается в еще один конверт и
отправляется дальше до тех пор, пока письмо не доходит до дома.
Любимая девушка лейтенанта Пупкина, получив письмо, очень сильно волнуется, когда
получается опухшую от количества конвертов записку. Поэтому, когда она распаковывает конверты
по очереди ее пульс сильно меняется в зависимости от того, уехал ее любимый дальше от дома, или
его очередная часть стала ближе.
Помогите определить старому ловеласу Василию частоту пульса любимой, если он знает, что
когда конверт отправлен с воинской части ближе к дому ее пульс учащается на 10 уд/мин, а когда
отъезжает дальше – падает на 15. Если пульс любимой падает ниже 1 уд/мин, то Пупкин сразу
понимает, что остался один..
Входные данные:
Во входном файле на первой строке указан начальный пульс любимой девушки Пупкина N
(1<=N<=100).
Далее, на второй строке, указана последовательность символов «+» (плюс) или «-» (минус).
Плюс значит, что Пупкин уехал дальше от дома, а минус – ближе к дому.
Пульс любимой девушки Пупкина не превышает в процессе своей работы значения 32767 (с
ума сойти!).
Выходные данные:
Необходимо в выходной файл вывести значение пульса любимой девушки Пупкина в виде
числа, либо строку «alone, again alone!», если пульс любимой в процессе разворачивания конвертов
окажется меньше 1 уд/мин.
Пример:
love.in
60
-+-+-
Физико-математический лицей № 30.
love.out
60
Computer Science Department of Phys-Math Lyceum № 30.
4
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача E. Просто кино.
Общая информация:
Имя входного файла: cinema.in
Имя выходного файла: cinema.out
Лимит времени: 1 секунда.
Условие задачи:
Ст. сержант Василий Пупкин порой любит вспоминать свою молодость. Надо сказать, что
жизнь его сложилась не самым удачным образом. После школы он с успехом поступил в ВУЗ, где
почему-то отвлекся и стал забивать на учебу. Результат оказался неизбежен – он был призван в
Вооруженные Силы.
Несмотря на все перипетии свой жизни он всегда оставался и остается предан своему
единственному увлечению – кино. И даже получив увольнительную, первым делом бежит к
ближайшему кинотеатру. И каждый раз перед ним встает непосильная для ст. сержанта задача – как
сходить на максимальное число фильмов, если известно, что каждый фильм характеризуется двумя
целыми числами b – время начала и e – время окончания.
Замечание: если фильм закончился в момент времени t1, то следующий фильм, который
Василий может посетить, должен начинаться в момент времени t2 > t1.
Входные данные:
В первой строке дано число n (1 <= n <= 100000) – количество фильмов.
Далее идет n строк – описание фильмов. Каждая строка содержит два числа b[i] и e[i] – время
начала и конца фильма (1 <= b[i] < e[i] <= 15000).
Описание фильмов дается в отсортированном порядке, то есть b[i] < b[i + 1], а при b[i] = b[i +
1] e[i] <= e[i + 1].
Выходные данные:
Выведите одно целое число — наибольшее количество фильмов, которое может посмотреть
Вася.
Пример:
cinema.in
5
1
1
3
4
6
cinema.out
3
3
5
4
5
7
Физико-математический лицей № 30.
Computer Science Department of Phys-Math Lyceum № 30.
5
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача F. Связь.
Общая информация:
Имя входного файла: rope.in
Имя выходного файла: rope.out
Лимит времени: 1 секунда.
Условие задачи:
На этот раз старшину Василия Пупкина застали учения. В условиях полевых действий было
решено использовать проводную связь, между подвластными ему отрядами для того, чтобы
вражеские связисты не имели возможности перехватить радиосигнал. Однако, чтобы не получить
выговор, Василий должен быть довольно экономным и не тратить лишние метры провода, поэтому
он решил поступить так:
1)Зная о том, что все его отряды находятся в вершинах выпуклого многоугольника, он решил
соединить их циклически, как раз по сторонам этого самого многоугольника (т.е. каждая сторона
многоугольника является проводом)
2)Так же необходимо иметь возможность соединяться со Штабом (который находится за
пределами многоугольника, о котором говорилось в пункте 1). Штаб может быть подключен в любом
месте к уже проведенному проводу.
Необходимо подсчитать длину провода, необходимую для того, чтобы наладить проводную
связь в отрядах на время учений.
Входные данные:
В первой строке файла указано число N – количество отрядов, которые находятся под
управлением старшины Пупкина. Далее идут вещественные координаты отрядов X Yi. Координаты в
строке записаны через пробел. Каждая пара координат на новой строке. Вершины образуют
выпуклый многоугольник, причем в файле они указаны в порядке их следования. Штаб находится в
точке с координатами (0; 0).
Выходные данные:
Вывести вещественное число – наименьшую длину провода, который необходимо взять
старшине Василию Пупкину, Точность – 3 знака после запятой.
Пример:
rope.in
4
-1.000000 2.000000
-1.000000 4.000000
1.000000 4.000000
1.000000 2.000000
Физико-математический лицей № 30.
rope.out
10.000
Computer Science Department of Phys-Math Lyceum № 30.
6
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача G. Таблица.
Общая информация:
Имя входного файла: matrix.in
Имя выходного файла: matrix.out
Лимит времени: 1 секунда.
Условие задачи:
Наконец-то Василий Пупкин дождался повышения – он стал лейтенантом. Но первый день в
новом звании оказался слишком утомительным, ведь Василий понимал, что ответственности на его
плечах стало еще больше. Он усердно трудился в своей родной части, пока наконец не подошел к
концу его рабочий день. Уставший и измученный лейтенант уже собирался уходить домой, как вдруг
ему на глаза попалась книжка с интересным названием — “Генеральские задачки”. Василий, будучи
выпускником Физ.-Мат. Лицея, был неравнодушен к заданиям, в которых нужно использовать силу
мысли, и поэтому он решил потратить немного времени изучению задачек в этой книжке. Открыв
первую попавшуюся страницу Вася наткнулся на интереснейшую игру, которая заставила его
задуматься. В игре речь шла о некоторой матрице N на M, в ячейках которой находились целые
числа —1000 < a[i][j] < 1001. Так же даны две операции: домножение всех чисел в некоторой строке
на -1 и домножение всех чисел в некотором столбце на -1. После применения этих операций матрица
должна получиться такой, чтобы в каждом столбце и в каждой строке сумма элементов было
неотрицательной. Василий решил, что долго думать над такой задачей он не сможет, ведь дома его
ждет любимая жена, поэтому, чтобы она сильно не переживала, где же пропадает ее муж, Василий
решил, что сможет сделать не более 600 операций. Необходимо понять, сможет ли новый лейтенант
Пупкин справиться с поставленной задачей и, если сможет, то за какое количество операций.
Входные данные:
В первой строке файла указаны числа N и M – размерность матрицы. Далее идет N строчек по
M целых чисел, задающих матрицу -1000 < a[i][j] < 1001.
Выходные данные:
Строчка “Impossible”, если матрицу нельзя привести к нужному виду, или K – число операций,
которое совершит Василий, чтобы завершить игру, а далек K строк, описывающие действия:
X num – умножить все элементы строчки num на -1;
Y num – умножить все элементы столбца num на -1;
Столбца и строчки нумеруются с 1.
Пример:
matrix.in
3 3
-1 0 0
0 -1 0
0 0 -1
Физико-математический лицей № 30.
matrix.out
3
X 1
X 2
X 3
Computer Science Department of Phys-Math Lyceum № 30.
7
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача H. Секрет ФибоКсоруса.
Общая информация:
Имя входного файла: secret.in
Имя выходного файла: secret.out
Лимит времени: 1 секунда.
Условие задачи:
Однажды в часть, где проводил свое рабочее время ст. лейтенант Василий Пупкин привезли
экспериментальное оборудование для перехвата вражеского сигнала “FiboXorus”. Данные разведки
говорят, что по вражескому каналу должна передаваться секретная шифровка в виде двух целых
чисел 0 < L < 16 и 0 < M < 16, задающих некоторое целое неотрицательное число N < 1000. Василию
удалось перехватить сигнал, осталось лишь научиться его разгадывать. Помогите В. Пупкину с
расшифровкой сигнала.
Входные данные:
Первая строка файла содержит два целых числа 0 < L < 16 и 0 < M < 16 – перехваченная
шифровка.
Выходные данные:
Целое неотрицательное число – вражеские данные.
Пример:
secret.in
1 2
3 5
1 5
2 11
Физико-математический лицей № 30.
secret.out
0
7
4
88
Computer Science Department of Phys-Math Lyceum № 30.
8
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача I. Топливо.
Общая информация:
Имя входного файла: fuel.in
Имя выходного файла: fuel.out
Лимит времени: 1 секунда.
Условие задачи:
Пришло время, когда капитан Василий Пупкин разобрался со всеми делами по работе и решил
съездить со своей семьей на море. Все бы хорошо, но Василий был счастливым обладателем “Чудомашины”, которую не нужно было заправлять топливом. Все что было нужно сделать – заменить
старый бензобак, в котором топливо закончилось, на новый. Поэтому Василий решил запастись
бензобаками для успешной поездки. Каждый бензобак имеет некоторую вместимость (Mi литров),
причем скорость “Чудо-машины” с этим бензобаком будет равна его вместительности (Mi метров в
секунду). В секунду “Чудо-машина” сжигает 1 литр топлива. Замена топливного бака на другой не
занимает времени, т.е. происходит мгновенно.
Входные данные:
В первой строке указано N < 10000 - кол-во топливных баков, которые берет с собой Василий.
На второй строке через пробел указаны натуральные числа Mi < 10000 - вместительности баков,
причем, каждый бак заполнен до краев. На третьей строчке K < 1000000 – расстояние в метрах,
которое необходимо проехать.
Выходные данные:
Число -1, если Василий и его семья так и не сумеют добраться до моря. В противном случае –
минимальное кол-во баков, которое необходимо будет использовать для переезда и минимальное
время за которое, они смогут доехать с точностью 6 знаков после запятой.
Пример:
fuel.in
3
3 2 1
14
Физико-математический лицей № 30.
fuel.out
3 6.000000
Computer Science Department of Phys-Math Lyceum № 30.
9
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Задача J. Trente.
Общая информация:
Имя входного файла: trente.in
Имя выходного файла: trente.out
Лимит времени: 1 секунда.
Условие задачи:
Для нового пускового механизма «Pipeline30» необходима программа запуска, написанная на языке
программирования второго поколения «Trente». Командир дивизиона, майор Василий Иванович
Пупкин, на полевом выходе получает смарт-карту с программой для запуска установки, вставляет
карту в считыватель, и программа приводит установку в стартовую позицию.
Установка имеет 10 регистров памяти (от 0-го до 9-го), каждый величиной 1 байт (числа
используются беззнаковые) и управляется программой, состоящей из команд:

movAB — значение регистра B заносится в регистр А (например, mov35 — заносит число из
регистра 5 в регистр 3)

addAB — к значению регистра A прибавляется значение регистра B (например, add14 —
складывается значение регистра 1 и 4, и результат помещается в регистр 1)

subAB — из значения регистра A вычитается значение регистра B (например, sub59 — из 5го регистра вычитается значение регистра 9, и результат помещается в регистр 5)

mulAB — значение регистра A домножается на значение регистра B (например, mul27 —
умножается значение регистра 2 на значение регистра 7, и результат помещается в регистр 2)

incA — увеличить значение регистра A на 1 (например, inc8 — регистр 8 увеличивается
на 1)

decA — уменьшить значение регистра A на 1 (например, dec3 — регистр 3 уменьшается
на 1)
Программа имеет следующий формат:
 первая строка программы — всегда содержит текст "#!/bin/trente"
 остальные строчки программы содержат команды языка "Trente" по одной на строке.
 программа не содержит пробелов и пустых строк
 программа выполняется в порядке следования команд
 после любых вычислений в регистры заносится величина только младших 8-и бит от
результата.
 изначально все регистры равны 0.
 текст программы не содержит ошибок
Физико-математический лицей № 30.
Computer Science Department of Phys-Math Lyceum № 30.
10
XIV Дни программирования в Физико-математическом лицее № 30
Командная олимпиада по программированию, посвященная Дню Артиллерии.
21 ноября 2010 года
Например, после работы программы:
#!/bin/trente
dec5
inc8
inc8
mov25
mul28
содержимое регистров будет следующим:
регистр 2 — 254
регистр 5 — 255
регистр 8 — 2
остальные регистры равны 0
Ваша задача реализовать систему запуска механизма путем интерпретации программы на языке
"Trente" и выписать значения всех регистров в десятичном виде через пробел, в порядке возрастания
номеров регистров (с 0-го по 9).
Входные данные:
В файле записана программа на языке "Trente". Программа не превышает 16483 строки.
Выходные данные:
В выходной файл необходимо вывести значения регистров от 0-го по 9-й через один пробел.
Пример:
trente.in
#!/bin/trente
dec5
inc8
inc8
mov25
mul28
Физико-математический лицей № 30.
Trente.out
0 0 254 0 0 255 0 0 2 0
Computer Science Department of Phys-Math Lyceum № 30.
11
Download