Ферзь — це шахматна фігура, яка ходить (і б'є) по горизонталі, вертикалі та діагоналі.
Рядок, у якому стоїть ферзь, містить клітинок. Тому кількість клітинок, доступних для горизонтального ходу, дорівнює n - 1. Аналогічно, стовпчик, у якому знаходиться ферзь, містить клітинок, отже, кількість клітинок, доступних для вертикального ходу, дорівнює m - 1.
Таким чином, під ударом ферзя по горизонталі та вертикалі знаходяться n - 1 + m - 1 клітинок.
Розділимо дошку на чотири області, провівши через клітинку з ферзем горизонтальну та вертикальну лінії. У кожній з цих областей підрахуємо кількість клітинок, що потрапляють під його удар.
Розглянемо, наприклад, праву верхню чверть. Її довжина становить n - y клітинок, а ширина x - 1 клітинок. Отже, кількість клітинок під ударом ферзя в цій області дорівнює min(x - 1, n - y).
Аналогічно:
у лівій верхній чверті під ударом буде min(x - 1, y - 1) клітинок;
у лівій нижній чверті під ударом буде min(m - x, y - 1) клітинок;
у правій нижній чверті під ударом буде min(m - x, n - y) клітинок;
Приклад
Розглянемо приклад, у якому розмір дошки дорівнює 8 \times 8, а ферзь знаходиться в позиції .
Під горизонтальним та вертикальним ударом ферзя знаходиться n - 1 + m - 1 = 7 + 7 = 14 клітинок. Тепер розглянемо чотири чверті, у кожній з яких підрахуємо кількість клітинок під його ударом:
у лівій верхній чверті min(4, 3) = 3 клітинки;
у лівій нижній чверті min(4, 4) = 4 клітинки;
у правій нижній чверті min(3, 4) = 3 клітинки;
у правій верхній чверті min(3, 3) = 3 клітинки;
Загалом під ударом ферзя знаходиться 14 + 3 + 4 + 3 + 3 = 27 клітинок.
Реалізація алгоритму
Читаємо вхідні дані.
scanf("%d %d %d %d", &m, &n, &x, &y);Зберігаємо в змінну кількість клітинок, які знаходяться під ударом ферзя при горизонтальних та вертикальних ходах.
s = m - 1 + n - 1; // horiz & verticalПотім додаємо клітинки, які ферзь б'є по діагоналях.
s += min(m - x, n - y); // (x,y) = (m, n)
s += min(m - x, y - 1); // (x,y) = (m, 1)
s += min(x - 1, n - y); // (x,y) = (1, n)
s += min(x - 1, y - 1); // (x,y) = (1, 1)Виводимо відповідь.
printf("%lld\n",s);