/tinkoff_contest

Мое решение бесконечного контеста

Primary LanguageJava

tinkoff_contest

Мое решение бесконечного контеста

  • 1-✅
  • 2-✅
  • 3-✅
  • 4-✅
  • 5-✅
  • 6-✅
  • 7-❌
  • 8-❌
  • 9-❌
  • 10-❌
  • 11-❌
  • 12-⚠️

1 задание

Костя подключен к мобильному оператору «Мобайл». Абонентская плата Кости составляет A рублей в месяц. За эту стоимость Костя получает B мегабайт интернет-трафика. Если Костя выйдет за лимит трафика, то каждый следующий мегабайт будет стоить ему C рублей. Костя планирует потратить D мегабайт интернет-трафика в следующий месяц. Помогите ему сосчитать, во сколько рублей ему обойдется интернет.

Формат входных данных: Вводится 4 целых положительных числа A,B,C,D(1≤A,B,C,D≤100) — стоимость тарифа Кости, размер тарифа Кости, стоимость каждого лишнего мегабайта, размер интернет-трафика Кости в следующем месяце. Числа во входном файле разделены пробелами.

Формат выходных данных: Выведите одно натуральное число — суммарные расходы Кости на интернет.

Замечание: В первом примере Костя сначала оплатит пакет интернета, после чего потратит на 5 мегабайт больше, чем разрешено по тарифу. Следовательно, за 5 мегабайт он дополняет отдельно, получившаяся стоимость 100+12×5=160 рублей. Во втором примере Костя укладывается в тарифный план, поэтому платит только за него.

Примеры данных:

Screenshot 2023-04-19 at 21 43 55

2 задание

Ваня принес на кухню рулет, который он хочет разделить с коллегами. Для этого он хочет разрезать рулет на N равных частей. Разумеется, рулет можно резать только поперек. Соотвественно, Костя сделает N−1 разрез ножом через равные промежутки. По возвращению с кофе-брейка Ваня задумался — а можно ли было обойтись меньшим числом движений, будь нож Вани бесконечно длинным (иначе говоря, если он мог бы сделать сколько угодно разрезов за раз, если эти разрезы лежат на одной прямой)? Считается, что места для разрезов намечены заранее, и все разрезы делаются с ювелирной точностью. Оказывается, что можно. Например, если Ваня хотел бы разделить рулет на 4 части, он мог бы обойтись двумя разрезами — сначала он разделил бы рулет на две половинки, а потом совместил бы две половинки и разрезал обе пополам одновременно. Вам дано число N, требуется сказать, каким минимальным числом разрезов можно обойтись.

Формат входных данных: Дано одно натуральное число N(1≤N≤2×10^9) — количество людей на кофе-брйке.

Формат выходных данных: Выведите одно число — минимальное число движений, которое придется сделать Косте.

Замечание

Чтобы разрезать рулет на 6 частей, Ване сначала придется разрезать его на две равные части, после чего совместить две половинки и сделать два разреза. Чтобы разрезать рулет на 5 частей, Ване понадобится разделить его в соотношении 2:3, после чего совместить два рулета по левому краю и разрезать бОльший рулет на одинарные кусочки — меньший тоже разделится на одинарные.

Примеры данных:

Screenshot 2023-04-19 at 21 44 21

3 задание

У Кати насыщенный день на работе. Ей надо передать n разных договоров коллегам. Все встре- чи происходят на разных этажах, а между этажами можно перемещаться только по лестничным пролетам — считается, что это улучшает физическую форму сотрудников. Прохождение каждого пролета занимает ровно 1 минуту. Сейчас Катя на парковочном этаже, планирует свой маршрут. Коллег можно посетить в любом порядке, но один из них покинет офис через t минут. С парковочного этажа лестницы нет — только лифт, на котором можно подняться на любой этаж. В итоге план Кати следующий:

  1. Подняться на лифте на произвольный этаж. Считается, что лифт поднимается на любой этаж за 0 минут.
  2. Передать всем коллегам договоры, перемещаясь между этажами по лестнице. Считается, что договоры на этаже передаются мгновенно.
  3. В первые t минут передать договор тому коллеге, который планирует уйти.
  4. Пройти минимальное количество лестничных пролетов.

Помогите Кате выполнить все пункты ее плана.

Формат входных данных: В первой строке вводятся целые положительные числа n и t (2≤n,t≤100) — количество сотрудников и время, когда один из сотрудников покинет офис (в минутах). В следующей строке n чисел — номера этажей, на которых находятся сотрудники. Все числа различны и по абсолютной величине не превосходят 100. Номера этажей даны в порядке возрастания. В следующей строке записан номер сотрудника, который уйдет через t минут.

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

Замечание

В первом примере времени достаточно, чтобы Катя поднялась по этажам по порядку. Во втором примере Кате понадобится подняться к уходящему сотруднику, а потом пройти всех остальных — например, в порядке {1,2,3,4,6}

Примеры данных:

Screenshot 2023-04-19 at 21 43 08