Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №1983903
А
Аноним
23 октября 2024 09:53 · публичный вопрос
А
Аноним

Наши слоны На столе лежит шахматная доска, в которой n строк и m столбцов. Слон может ходить по диагонали на любое количество клеток. Пустая клетка находится «под боем», если…

Запрос пользователя

Наши слоны На столе лежит шахматная доска, в которой n строк и m столбцов. Слон может ходить по диагонали на любое количество клеток. Пустая клетка находится «под боем», если какой‑либо из слонов на доске может одним ходом перейти на эту клетку. На доске в четырёх углах стоят четыре слона. Сколько клеток находится «под боем»? Формат входных данных В первой строке содержится количество строк шахматной доски nn, во второй столбцов mm (2≤n, m≤108). Формат выходных данных В единственной строке выведите целое число количество клеток, находящихся «под боем». Пример: Ввод 2 4 2 2 4 7 Вывод 4 0 10 Напиши код на c++

Ответ нейросети
23 октября 2024 09:53

Для решения задачи о количестве клеток, находящихся «под боем» от четырёх слонов, расположенных в углах шахматной доски, важно понимать, как слоны могут угрожать клеткам на доске.

Слоны могут двигаться по диагоналям, и в каждом углу (0,0), (0,m-1), (n-1,0) и (n-1,m-1) слоны будут угрожать клеткам вдоль своих диагоналей.

Чтобы определить, сколько клеток находится «под боем», давайте рассмотрим следующее:

  1. Слон в верхнем левом углу (0, 0) угрожает всем клеткам по двум диагоналям:

    • Первая диагональ: \(\text{y = x}\)
    • Вторая диагональ: \(\text{y = -x}\) (с учетом границ доски)
  2. Аналогично, слоны в других углах угрожают клеткам своего участка доски.

Обратите внимание, что клетки в углах и на диагоналях могут пересекаться, поэтому мы не можем просто суммировать клетку, находящуюся под боем от каждого слона. Вместо этого важно применяется комбинирование угрожаемых клеток.

Алгоритм вычисления:

  • Рассчитываем количество клеток, находящихся под боем, отдельно для каждого угла, но учитываем их пересечения.

Код на C++

#include <iostream>
using namespace std;

int main() {
    long long n, m;
    cin >> n >> m;

    // Общее количество клеток на доске
    long long total_cells = n * m;

    // Клетки, находящиеся под боем:
    // Учет угрожаемых клеток от каждого слона
    long long under_attack = (n - 1) + (m - 1) + (n - 1) + (m - 1);

    // Вырезаем увеличенное количество (4 клетки углов)
    under_attack -= 4;

    // Если меньше 0, значит все клетки под боем
    if(under_attack < 0) {
        under_attack = 0;
    }

    cout << under_attack << endl;
    
    return 0;
}

Объяснение кода:

  • Мы считываем размеры доски n и m.
  • Затем вычисляем количество клеток, находящихся под боем, учитывая, что каждый слон угрожает строкам и столбцам вокруг него.
  • Поскольку каждая клетка на краю доски уже отмечена, мы вычитаем 4 (клетки углов).
  • Проверяем, чтобы значение не стало отрицательным.
  • Ввели результат в консоль.

Пример запуска программы:

  • Ввод: 2 4
  • Вывод: 4

Таким образом, программа эффективно вычисляет количество клеток, находящихся под боем от слонов в углах шахматной доски. Если есть вопросы или нужна дополнительная информация, не стесняйтесь задавать!