题目大意
给定三个数 a , b , c a,b,c a,b,c,询问是否有某种摆放三个面积分别至少为 a , b , c a,b,c a,b,c 的矩形的方式,满足摆放出来的图形能被一个 x × y x\times y x×y 的矩形区域完全包含。
解题思路
很显然是数学题。又因为要摆放矩形总共只有三个,于是考虑枚举,情况只有以下三种:
∘ \circ ∘ 三个矩形均横放或竖放。
∘ \circ ∘ 两个矩形横放,剩下一个贴着这两个竖放。
∘ \circ ∘ 两个矩形竖放,剩下一个贴着这两个横放。
(一个矩形竖放或横放其实和上面情况无本质区别)
代码示例
#include<bits/stdc++.h>
using namespace std;
#define int long long
//已知矩形一边时,计算另一边至少为多少满足面积至少为a或b或c。
#define getans(a,b) (a+b-1)/b
int x,y,a,b,c,ld,ans=0;
signed main(){
cin>>x>>y>>a>>b>>c;
//三个都横放或竖放
if(getans(a,x)+getans(b,x)+getans(c,x)<=y||getans(a,y)+getans(b,y)+getans(c,y)<=x) ans=1;
ld=x-getans(a,y);
if(ld>0&&getans(b,ld)+getans(c,ld)<=y) ans=1;
ld=x-getans(b,y);
if(ld>0&&getans(a,ld)+getans(c,ld)<=y) ans=1;
ld=x-getans(c,y);
if(ld>0&&getans(a,ld)+getans(b,ld)<=y) ans=1;
ld=y-getans(a,x);
if(ld>0&&getans(b,ld)+getans(c,ld)<=x) ans=1;
ld=y-getans(b,x);
if(ld>0&&getans(a,ld)+getans(c,ld)<=x) ans=1;
ld=y-getans(c,x);
if(ld>0&&getans(a,ld)+getans(b,ld)<=x) ans=1;
if(ans==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}