算法
(思维) $O(6)$
我们可以枚举以下 $6$ 种分割,然后 $O(1)$ 判定即可
其实也就是法国国旗,德国国旗,以及马达加斯加的 $4$ 种 $90°$ 旋转
而后两种分割和中间两种是等价的,所以可以不考虑
此外,每种分割可对应矩形的三种放法,即 $ABC, BCA, CAB$
C++ 代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using std::cin;
using std::cout;
using std::swap;
using ll = long long;
ll divCeil(ll a, ll b) { return (a + b - 1) / b; }
bool f2(ll x, ll y, ll a, ll b) {
ll w = divCeil(a, y) + divCeil(b, y);
return w <= x;
}
bool f3(ll x, ll y, ll a, ll b, ll c) {
ll w = divCeil(a, y);
if (w >= x) return false;
x -= w;
return f2(x, y, b, c) or f2(y, x, b, c);
}
int main() {
ll x, y;
cin >> x >> y;
ll a, b, c;
cin >> a >> b >> c;
rep(fi, 2) {
rep(ri, 3) {
if (f3(x, y, a, b, c)) {
puts("Yes");
return 0;
}
swap(a, b); swap(b, c);
}
swap(x, y);
}
puts("No");
return 0;
}
### 太牛了!!!