За один ход убираются две монеты из одной кучки и одна монета из другой. Можно выбирать любую из кучек для каждого варианта. Нельзя убирать больше монет, чем осталось в кучке. Определите, можно ли довести обе кучки до нуля.
Реализуйте функцию coin_piles(left, right).
Входные данные
left: количество монет в левой кучке.
right: количество монет в правой кучке.
Выходные данные
Верните true, если обе кучки можно опустошить; иначе верните false.
Ограничения
0 ≤ left, right ≤ 1 000 000 000. Две пустые кучки считаются успешным результатом.
Примеры
Ввод:
left = 4
right = 2
Ожидаемый вывод:
expected = True
Ввод:
long long left = 4;
long long right = 2;
Ожидаемый вывод:
bool expected = true;
Ввод:
long left = 4;
long right = 2;
Ожидаемый вывод:
bool expected = true;
Пояснение
Два раза убираем (2, 1): (4, 2) → (2, 1) → (0, 0).
Ввод:
left = 4
right = 1
Ожидаемый вывод:
expected = False
Ввод:
long long left = 4;
long long right = 1;
Ожидаемый вывод:
bool expected = false;
Ввод:
long left = 4;
long right = 1;
Ожидаемый вывод:
bool expected = false;
Пояснение
Единственный возможный первый ход оставляет (2, 0), после чего нельзя опустошить левую кучку.
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
За один ход удаляется ровно три монеты, значит общее число монет должно этому соответствовать.
Подсказка 2
Ни одна куча не может стать отрицательной, поэтому одна куча не может превосходить то, что может поддержать другая.
Подсказка 3
Проверяйте и общее количество, и разницу между кучами.
Ожидаемая сложность
O(1) по времени, O(1) доп. памяти
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.