Спираль
Ограничение по времени: 1 секунда
В левом верхнем углу прямоугольного поля размера N×M сидит Черепашка. Она хочет закрасить некоторые клетки по спирали, закручивающейся к центру, как на рисунке:
Формат выходных данных
Программа должна вывести одно целое число — количество клеток, закрашенных Черепашкой.
Обратите внимание, что ответ в этой задаче может превышать возможное значение 32‑битной целочисленной переменной, поэтому необходимо использовать 64‑битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).
Answers & Comments
Ответ:
n, m = [int(input()) for h in range(2)]
ans = 0
while n >= 4 and m >= 4:
k = (n + m - (lambda a, b: ((a // b) * a + (b // a) * b) // (a // b + b // a))(n, m)) // 4
ans += ((n + m) + (n + m) - 4 * (k - 1)) * k // 2
n, m = n - 2 * k, m - 2 * k
if n == 3 and m >= 3:
ans += 2 * m + 1
elif n == 2 and m >= 2:
ans += m + 1 + int(m >= 3)
elif m == 3 and n >= 3:
ans += 2 * n + 1
elif m == 2 and n >= 2:
ans += n + 1
else:
ans += n * m
print(ans)
Объяснение: