CubeCraft: сколько кубиков с краской

тема: Комбинаторика и множества · уровень: базовый

Условие

В игре CubeCraft ты собрал большой куб из n×n×n одинаковых маленьких кубиков. Потом ты окунул конструкцию в краску: прокрасились все внешние грани большого куба. После этого ты разобрал куб на маленькие.

Для выдачи наград игре важно, сколько маленьких кубиков попало в каждую категорию по числу окрашенных граней:

Заметь: при n=1 единственный кубик будет окрашен со всех 6 сторон, поэтому он относится к категории «3 или больше».

Формат ввода Одно целое число n.

Формат вывода Выведите 4 целых числа через пробел: количество кубиков с 0, 1, 2, 3+ окрашенными гранями (в таком порядке).

Ограничения

Пример Ввод:

3

Вывод:

1 6 12 8

Как решать — идея подхода

Приём: Комбинаторный подсчёт по типам кубиков (внутри/грань/ребро/угол)

Ключевое наблюдение: число окрашенных граней у маленького кубика зависит только от того, где он стоит в большом кубе — внутри, на грани (но не на ребре), на ребре (но не в углу) или в углу. После окунания красятся все внешние грани большого куба, значит:

Почему это работает: у каждого типа фиксированное число «выходов наружу», и таких кубиков легко посчитать формулой.

План:

Сложность: O(1) по времени и памяти.

Частая ошибка: забыть, что формулы с t = n-2 дают нули/отрицательные значения при n=1 или n=2 — эти случаи нужно обработать отдельно.

Разберись руками

Берём куб 3×3×3 из 27 маленьких кубиков и красим снаружи все его грани. Потом разбираем и считаем, сколько маленьких кубиков имеют 0, 1, 2 и 3+ окрашенных граней.

Идея: Раздели маленькие кубики по месту: углы дают 3+ окрашенных граней, рёбра (без углов) дают 2, центры граней дают 1, а то, что не касается поверхности, даёт 0. Потом просто посчитай, сколько таких мест бывает, и выведи количества в нужном порядке.

Решить задачу с автопроверкой на Python →

Куда дальше