Существует множество различных типов комплектов поездов, начиная с деревянных гусениц, таких как Brio, и заканчивая полностью цифровым управлением идеальными крошечными металлическими копиями реальных поездов, но все они требуют разработки гусеницы, в идеале с использованием как можно большего количества деталей.
Итак, ваша задача состоит в том, чтобы определить, возможно ли при заданном вводе доступных частей построить полную замкнутую цепь, используя все элементы, и, если нет, сколько частей останется от максимально возможной цепи.
Так как это упрощенный набор поездов, есть только 3 элемента: большая кривая, маленькая кривая и прямая. Все они основаны на квадратной сетке:
- «Большая кривая» - это угол 90 градусов, охватывающий 2 единицы в каждом измерении
- «Маленькая кривая» - это угол 90 градусов, охватывающий одну единицу в каждом направлении
- «Прямой» - прямой элемент длиной 1 единица
Это означает, что минимально возможная цепь состоит из 4 маленьких кривых - это круг, радиус 1 единица. Это можно расширить, добавив пары прямых элементов для формирования различных овалов. Существуют и другие схемы, которые можно добавить, добавив больше кривых или смешав типы кривых.
Этот набор поездов не включает в себя какие-либо перекрестки или методы пересечения путей, поэтому недопустимо, чтобы два элемента соединялись с одним и тем же концом другого элемента (без Y-образований) или для пересечения друг с другом (без X-образований) , Кроме того, это набор поездов, поэтому любая формация, которая не позволяет проходить поезду, недопустима: примеры включают прямые, встречающиеся под углами 90 градусов (между перпендикулярными прямыми всегда должна быть кривая) и кривые, встречающиеся под углами 90 градусов (кривые должны течь).
Вы также хотите использовать как можно больше частей, игнорируя их тип, поэтому вы всегда будете выбирать схему, в которой больше битов. Наконец, у вас есть только одна последовательность, поэтому любое решение, которое приводит к нескольким цепям, неприемлемо ,
вход
Либо массив из трех целых чисел, все больше или равный 0, соответствующий количеству доступных больших кривых, маленьких кривых и прямых линий, или параметры, переданные в вашу программу, в том же порядке.
Выход
Число, соответствующее количеству кусков, оставшихся при построении максимально возможной схемы для предоставленных элементов.
Тестовые данные
Minimal circuit using big curves
Input: [4,0,0]
Output: 0
Slightly more complicated circuit
Input: [3,1,2]
Output: 0
Incomplete circuit - can't join
Input: [3,0,0]
Output: 3
Incomplete circuit - can't join
Input: [3,1,1]
Output: 5
Circuit where big curves share a centre
Input: [2,2,0]
Output: 0
Bigger circuit
Input: [2,6,4]
Output: 0
Circuit where both concave and convex curves required
Input: [8,0,0] or [0,8,0]
Output: 0
Circuit with left over bit
Input: [5,0,0] or [0,5,0]
Output: 1
Заметки
- 2 прямые и небольшая кривая эквивалентны большой кривой, но используют больше фигур, поэтому предпочтительны - никогда не должно быть ситуации, когда остается эта комбинация, если в схеме есть большие кривые
- 4 маленьких кривых обычно можно поменять местами на 4 прямые, но только если это не приведет к пересечению контура
- Набор поездов также идеализирован - элементы пути занимают указанную ширину, поэтому в некоторых случаях допустимо, чтобы кривые проходили через один квадрат сетки, не пересекаясь. Сетка просто определяет размеры элемента. В частности, две большие кривые могут быть размещены так, чтобы квадрат сетки в верхнем левом углу примера диаграммы также был нижним правым квадратом другой большой кривой, идущей слева направо (с диаграммой, показывающей одну, идущую справа налево)
- Маленькая кривая может поместиться в пустом пространстве под большой кривой (справа внизу квадрат сетки). Вторая большая кривая также могла бы использовать это пространство, сдвинув одну поперек и одну вниз от первой
- Маленькая кривая не может поместиться в том же пространстве сетки, что и внешняя сторона большой кривой - в основном потому, что нет способа подключиться к ней, который не пересекается незаконно
[5,0,0]
или[0,5,0]
будет1
. Это верно? Не могли бы вы добавить такой тест?