Олимпиадная задачка проходит не все тесты C++
Задача
Шахматная доска - игровое поле, часть инвентаря для игры в шахматы. Существует классический вариант шахматной доски, предназначенный для игры в традиционные шахматы, а также множество вариантов, предназначенных для игры во многочисленные варианты шахмат. В нашей задаче нужно составить доску для особого варианта игры. Эта доска будет составлена из кубиков белого и черного цвета и иметь специальный размер N на M клеток. В наличии есть A кубиков черного цвета и B кубиков белого цвета. Можно ли составить из них нужную доску, если первая клетка нижней строки всегда должна быть черной?
Формат входных данных
В первой строке дано два натуральных числа N и M (1 ≤ N, M ≤ 1000). Во второй строке даны два натуральных числа A и B (1 ≤ A, B ≤ 1000000) - количество кубиков черного и белого цвета соответственно.
Формат результата
Выведите слово YES, если можно составить доску N на M, иначе выведите слово NO.
Примеры
Входные данные
5 5
13 12
Результат работы
YES
Ниже мой код, который проходит не все тесты, что не так с моим кодом? Помогите пожалуйста.
#include <iostream>
using namespace std;
int main() {
int n, m, a, b;
cin >> n >> m >> a >> b;
if (n != m) {
cout << "NO";
}
else if ((n*m >= a + b) && (a >= b)) {
cout << "YES";
}
else {
cout << "NO";
}
}
Ответы (2 шт):
Доска же может быть не квадратной, N*M == A + B всегда должно быть равно Далее по замощению если хотя бы M или N четное то A должно быть равно B
0 =
= 0
0 = 0
= 0 =
0 = 0
= 0 =
0 = 0
= 0 =
Могу это описать как, что доску можно разделить на пары клеток где в каждой паре белая и черная клетка.
Если N и M нечетные тогда у нас начинается чередование по рядам где в одной ряду больше на одну белую а в другом на одну черную, но так как начальный ряд по заданию начинается с черной -> все ряды между собой компенсируются кроме одного где будет на одну черную больше (A == B + 1)
= 0 = 2ч 1б 3 ряд
0 = 0 1ч 2б 2 ряд
= 0 = 2ч 1б 1 ряд
Все ряды кроме 1 будут иметь себе пару которая уравняет количество белых и черных, любая большая размерность сводится к этой или даже к более простой:
= 1ч 0б 1 ряд
Путем удаление пар
Думаю, этого будет достаточно:
if ((a >= n*m-n*m/2)&&(b >= n*m/2))
Почему так? - если хотя бы одно измерение доски чётное, то количество чёрных и белых клеток одинаково, иначе чёрных на единицу больше, что и учитывается при целочисленном делении.