Разбор задач Технокубок 2016 — Отборочный Раунд 2

Revision ru6, by fcspartakm, 2016-03-27 02:42:19

649A - Любимые числа Поликарпа

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

Пример решения

649B - Этажи

Для решения данной задачи нужно было аккуратно реализовать то, что написано в условии. Основная сложность заключалась в определении номера подъезда и номера этажа по номеру квартиры. Это можно было сделать следующим образом: если в доме n подъездов, в каждом подъезде по m этажей, а на каждом этаже по k квартир, то квартира с номером a находится в подъезде номер (a - 1) / (m * k) и на этаже номер ((a - 1)%(m * k)) / k, причем эти номера 0-индексированы, что удобно для дальнейших вычислений. После определения номеров подъездов и этажей, нужно было рассмотреть два случая — когда номера подъездов Эдварда и Наташи равны (тогда нужно было выбрать, что оптимальнее — доехать на лифте или подняться/спуститься по лестнице), и когда эти номера различны (тут нужно было не забыть, что дом круглый, и выбрать нужное направление).

Пример решения

649C - Печать условий

Сначала отсортируем заданные размеры комплектов задач в неубывающем порядке. Затем нужно начать перебирать комплекты задач, начиная с наименьшего. Если мы не можем напечатать текущий комплект, то никакой следующий комплект мы гарантированно не сможем напечатать, поэтому нужно вывести ответ и закончить алгоритм. В противном случае нужно напечатать текущий комплект, увеличить ответ на единицу и перейти к следующему комплекту. Каждый комплект оптимально печатать следующим образом. Пусть x — это оставшееся количество двусторонних листов, y — это оставшееся количество односторонних листов, а a — это количество страниц в текущем комплекте задач. Если x = 0 и y = 0, то напечатать текущий комплект мы точно не сможем. Если a нечетно и y > 0, напечатаем одну страницу на одностороннем листе и уменьшим a и y на единицу, иначе если a нечетно и x > 0, напечатаем одну страницу на двустороннем листе (который больше использовать не будем) и уменьшим a и x на единицу. Теперь a это всегда четное число. Поэтому выгодно сначала по максимуму использовать для печати двусторонние листы, а если их не хватает — односторонние. Если и односторонних листов не хватает, то текущий комплект распечатать мы не сможем.

Пример решения
Tags технокубок, отборочный, разбор, editorial

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru11 Russian fcspartakm 2016-03-27 03:37:38 40 (опубликовано)
ru10 Russian fcspartakm 2016-03-27 03:36:50 2900
ru9 Russian fcspartakm 2016-03-27 03:05:15 52
ru8 Russian fcspartakm 2016-03-27 03:04:30 1275
ru7 Russian fcspartakm 2016-03-27 02:42:51 28
ru6 Russian fcspartakm 2016-03-27 02:42:19 1884 Мелкая правка: ' подняться по ле' -> ' подняться/спуститься по ле'
ru5 Russian fcspartakm 2016-03-27 02:23:45 27 Мелкая правка: ' подняться по ле' -> ' подняться/спуститься по ле'
ru4 Russian fcspartakm 2016-03-27 02:23:06 17 Мелкая правка: '$((a - 1) % (m * k))' -> '$((a - 1) \% (m * k))'
ru3 Russian fcspartakm 2016-03-27 02:22:25 1387
ru2 Russian fcspartakm 2016-03-27 02:11:12 63
ru1 Russian fcspartakm 2016-03-27 02:09:28 888 Первая редакция (сохранено в черновиках)