競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 223E

 

ABC223E

\(X \times Y\) の長方形 \(R\) を3分割して,それぞれの面積が \(A,B,C\) 以上にできるかを考える. 切り方は, \(R\) の辺と並行になる直線だけで余さそう. 斜めに長方形を配置するのは無駄が多そうだから.
切り方の候補は, (横,縦), (横,横) と,これらの横と縦を反転した4つを試す.

使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"

void yesno(bool f){ if(f){ cout << "Yes" << endl; } else{ cout << "No" << endl; } }


int main() {

  ll x,y; cin >> x >> y;
  vll a(3); cinv(a);

  auto f = [&](vll &v) -> bool {
    ll s,t;
    s = ceil(v[0],y);
    if(s >= x) return false;

    t = ceil(v[1],x-s);
    if(t >= y) return false;

    return v[2] <= (x-s)*(y-t);
  };
 

  auto g = [&](vll &v) -> bool {
    ll s,t;
    s = ceil(v[0],y);
    if(s >= x) return false;
   
    t = ceil(v[1],y);
    if(s+t >= x) return false;

    return v[2] <= y*(x-(s+t));
  };
   
  auto judge = [&](auto func) -> bool {
    sort(all(a));
    do{
      if(func(a)){
        return true;
      }
    }while(next_permutation(all(a)));
    return false;
  };
 

  bool ans = false;
  rep(_,2){
    if(judge(f)) ans = true;
    if(judge(g)) ans = true;
    swap(x,y);
  }
  yesno(ans);

  return 0;
}