Умова
Задача Detour. Поле в «клітинку» розмірами n*m потрібно обійти по спіралі (так як це показано на малюнку), відвідуючи кожну клітинку. Починати обхід слід з верхньої лівої клітинки. Скільки поворотів (зрозуміло направо на 90 градусів) слід виконати?
Технічні умови. Програма Detour читає з пристрою стандартного введення два числа через пропуск n, m (1≤n, m ≤500000). Програма виводить одне ціле число – кількість поворотів.
Приклади
Введення | Виведення |
3 5 | 4 |
Розв'язування
Математична модель
Нижче давайте розглянемо кількість поворотів, коли мінімімум серед довжини і висоти стовпчика буде рівна 1,2,3,4 і спробуємо знайти закономірність
Тобто, якщо n або m=1, то кількість поворотів буде рівна 0 або 1
Тобто, якщо n або m=2, то кількість поворотів буде рівна 2 або 3
Тобто, якщо n або m=3, то кількість поворотів буде рівна 4 або 5
Якщо це все узагальнити, то можна побачити закономірність.
Якщо min(n,m)=1, то кількість поворотів 0 або 1(-1,+0)
Якщо min(n,m)=2, то кількість поворотів 2 або 3(+0,+1)
Якщо min(n,m)=3, то кількість поворотів 4 або 5(+1,+2)
Якщо min(n,m)=4, то кількість поворотів 6 або 7(+2,+3)
Якщо min(n,m)=5, то кількість поворотів 8 або 9(+3,+4)
В дужках я записав закономірність між мінімумом вхідних даних і кількістю поворотів
Закономірність важко побачити, але для того щоб отримати числа у дужках, які будуть додаватися до мінімумів вхідних даних, необхідно від цього мінімуму вхідних даних відняти або 2, або 1.
Наприклад, якщо вхідні дані 3 5, то мінімум по змінній n=3. Тоді, число в дужках рівне n-2=3-2=1. Тепер, це число необхідно додати до n, щоб отримати кількість поворотів. n+1=3+1=4. Якщо узагальнити, то кінцева формула для мінімуму n буде наступна n+n-2=2*n-2.
Не важко зрозуміти, якщо мінімальним буде m, то формула буде m+m-1=2*m-1
Реалізація
Немає коментарів:
Дописати коментар