CF1633C Kill the Monster 题解

· · 题解

模拟题。输入各项数据,枚举硬币的分配:将主角的生命值和攻击能力分别加上硬币给予的附加值,然后先求出怪兽杀死主角需要的局数,即 \left\lceil\dfrac{h_C}{d_M}\right\rceil,再求主角杀死怪兽需要的局数,即 \left\lceil\dfrac{h_M}{d_C}\right\rceil,如果前者大于等于后者,则主角能赢,否则尝试下一种枚举。如果每一种方案都不能行的话,则证明主角不可能赢。

放代码:

#include<bits/stdc++.h>
#define int long long // 不开 long long 见祖宗
using namespace std;
main(){
  ios::sync_with_stdio(false);
  int t; cin>>t;
  while(t--){
    int a,b,c,d,e,f,g,x,y; cin>>a>>b>>c>>d>>e>>f>>g;
    bool w=true;
    for(int i=0;i<=e;i++){ // 枚举
      int b1=b+i*f,a1=a+(e-i)*g;
      if(!(a1%d))x=a1/d; // 特判能整除的情况
      else x=ceil((double)a1/d);
      if(!(c%b1))y=c/b1;
      else y=ceil((double)c/b1);
      if(x>=y){w=false; cout<<"YES\n"; break;}
    }
    if(w)cout<<"NO\n"; // 每一种方案都不行
  }
  return 0;
}