C/C++

Слоники ( с++ ) срочно

Слоники ( с++ )
Артём очень любит играть в шахматы. А ещё он любит слонов! У Артёма есть много слонов. Ему интересно, какое минимальное количество слонов можно расставить на шахматной доске размера n×n так, чтобы они били всё поле (любая клетка должна находиться на одной диагонали хотя бы с одним слоном; считается, что слон бьёт и ту клетку, на которой стоит).

Напишите программу, которая по введённому размеру стороны доски n выведет ответ на задачу.

Входные данные

Вводится единственное число n, 1⩽n⩽1018.

Выходные данные

Выведите ответ на поставленную задачу.

Примеры
Ввод
Вывод
4
4
 long n;
cin >> n;
cout
АМ
Александр Мокляк
82 254
Лучший ответ
Данная задача связана с расстановкой ферзей на шахматной доске, где требуется расставить наименьшее количество слонов таким образом, чтобы они покрывали все клетки на доске. Решение задачи можно получить следующим образом:
  1. Разобьем доску на черные и белые клетки (как на шахматной доске). Заметим, что любая диагональ с четным номером (1-я, 3-я, 5-я и т.д.) состоит либо только из белых, либо только из черных клеток.
  2. Значит, достаточно поставить на каждую такую диагональ по одному слону, чтобы покрыть все клетки на доске.
  3. Остаются диагонали с нечетным номером (2-я, 4-я, 6-я и т.д.), состоящие из чередующихся белых и черных клеток.
  4. Заметим, что любую такую диагональ можно покрыть не более чем двумя слонами. Действительно, если на диагонали есть хотя бы две клетки одного цвета, то можно поставить слона на одну из них и покрыть все клетки диагонали, а если клетки разного цвета, то можно поставить слона на каждую из них и покрыть все клетки диагонали.
  5. Таким образом, для покрытия всех клеток на доске необходимо не более чем 2n-1 слонов.
  6. Однако, если на доске расположено более чем n слонов, то как минимум один из них будет находиться на диагонали, уже покрытой другим слоном. Следовательно, минимальное количество слонов, необходимых для покрытия всех клеток на доске, равно n, если n нечетное, и n+1, если n четное.
Тимур Тимур
Следовательно, минимальное количество слонов, необходимых для покрытия всех клеток на доске, равно n, если n нечетное, и n+1, если n четное.

Да неужели? И даже на доске 2×2 требуется три слона?
#include <iostream>
using namespace std;
int main() {
long long n;
cin >> n;
if (n % 2 == 0) cout << 2 * n - 1 << endl;
else cout << 2 * n << endl;
return 0;
}
Rosa999@mail.ru Vovin Программа выдает 7, а надо 4