Skip to content
This repository has been archived by the owner on Aug 26, 2023. It is now read-only.

Latest commit

 

History

History
145 lines (90 loc) · 7.88 KB

File metadata and controls

145 lines (90 loc) · 7.88 KB

sailfish

Покупка смартфонов

Time limit = 5 секунд(ы)

За новыми смартфонами на отечественной операционной системе "Аврора" выстроилась очередь из N человек, каждый из которых хочет купить 1 телефон. На всю очередь работала только одна касса, поэтому продажа устройств шла очень медленно, провоцируя создание мелкого бизнеса по перепродаже мест в очереди. Самые сообразительные быстро заметили, что, как правило, несколько гаджетов в одни руки кассир продает быстрее, чем когда эти же смартфоны продаются по одному. Поэтому они предложили нескольким подряд стоящим людям создавать краткосрочный консорциум: отдавать деньги первому из них, чтобы он купил на всех. Однако для борьбы со реселлерами кассир продавала не более 3-х устройств в одни руки, поэтому договориться таким образом между собой могли лишь 2 или 3 подряд стоящих человека.

Известно, что на продажу i-му человеку из очереди одного гаджета кассир тратит Ai секунд, на продажу двух устройств — Bi секунд, трех смартфонов — Ci секунд. Напишите программу, которая подсчитает минимальное время, за которое могли быть обслужены все покупатели.

Обратите внимание, что телефоны на группу объединившихся людей всегда покупает первый из них. Также никто в целях ускорения не покупает лишних смартфонов (то есть устройства, которые никому не нужны).

Входные данные

Записано сначала число N — количество покупателей в очереди (1 ≤ N ≤ 50000). Далее идет N троек натуральных чисел Ai, Bi, Ci. Каждое из этих чисел не превышает 36000. Люди в очереди нумеруются начиная от кассы.

Выходные данные

Выведите одно число — минимальное время в секундах, за которое могли быть обслужены все покупатели.

Примеры

Вход Выход
5
5 10 15
2 10 15
5 5 5
20 20 1
20 1 1
12
2
3 4 5
1 1 1
4

ways

Сколько дорог?

Из верхнего левого угла в правый нижний угол сетки 2x2 можно пройти 6 разными путями (без возвратов, т.е. если идти только вниз или вправо). Сколько таких разных путей можно найти в сетке N×M?

Входные данные

Целые числа 1 ≤ N, M ≤ 20 через пробел.

Выходные данные

Количество разных путей.

Примеры

Вход Выход
2 2 6

p_015


triangle

Спуск по треугольнику

При перемещении из вершины треугольника вниз по примыкающим снизу числам, максимальная сумма просмотренных чисел равна 23.

       3
      7 4
     2 4 6
    8 5 9 3

3+7+4+9=23

Найдите максимальную сумму на пути сверху вниз для заданного треугольника из N строк.

Входные данные

На первой строке количество строк в треугольнике 1 ≤ N ≤ 100. Далее каждая строка треугольника с новой строки, числа в треугольнике (от 0 до 100) задаются через пробел.

Выходные данные

Максимальная сумма.

Примеры

Вход Выход
4
3
7 4
2 4 6
8 5 9 3
23

decompositions - Разложения

Число разложений

Напишите программу, которая считает количество разложений P(N) данного натурального числа N на неупорядоченные натуральные слагаемые. Например, для N = 5 есть 7 различных разложений: 5 = 4+1 = 3+2 = 3+1+1 = 2+2+1 = 2+1+1+1 = 1+1+1+1+1. Разложения считаются различными если множества слагаемых различаются.

Входные данные

Натуральное число N, 0 < N ≤ 100.

Выходные данные

Число P(N).

Примеры

Вход Выход
5 7
15 176

sequence - Последовательности

Посчитайте количество последовательностей длины N из нулей и единиц, в которых нет двух соседних единиц.

Входные данные

В единственной строке входного файла одно число N ( 1 ≤ N ≤ 40 ).

Выходные данные

Вывести одно число — искомое количество последовательностей.

Примеры

Вход Выход
3 5

bankomat

Банкомат

В некотором государстве в обращении находятся банкноты определенных номиналов. Центральный банк хочет, чтобы банкомат выдавал любую запрошенную сумму при помощи минимального числа банкнот, считая, что запас банкнот каждого номинала неограничен. Помогите Центральному банку решить эту задачу.

Входные данные

Первая строка входных данных содержит натуральное число N не превосходящее 100 — количество номиналов банкнот в обращении. Вторая строка входных данных содержит N различных натуральных чисел x1, x2, ..., xN, не превосходящих 10^6 — номиналы банкнот. Третья строчка содержит натуральное число S, не превосходящее 10^6 — сумму, которую необходимо выдать.

Выходные данные

В первую строку выходного файла выведите минимальное число слагаемых (или -1, если такого представления не существует). Во вторую строку выведите это представление в любом порядке.

Примеры

Вход Выход
5
1 3 7 12 32
40
3
32 7 1