Codeforces Round #700 (Div. 2) B

B - The Great Hero

​ 描述的勇士有 X 攻击力 Y 的生命值,并且每次和怪物战斗都会损失 Y-a[i]的生命值。我们不如先把杀死所有怪物要损伤的生命值算出来,然后再依次恢复到杀第x个怪物的前一刀,看此时的英雄是不是还活着的,是的话就输出"YES"否则输出"NO"

代码:

#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
struct sz{
  double a,h;
}b[100001];
int main(){
  ios::sync_with_stdio(false);
  int t;
  cin>>t;
  while(t--){
    long long x,y,n,sum=0;
    bool flag=0;
    cin>>x>>y>>n;//x攻击力,y生命值,n怪物血量
    for(int i=1;i<=n;i++){
      cin>>b[i].a;//怪物攻击力
    }
    for(int i=1;i<=n;i++){
      cin>>b[i].h;//怪物生命值
    }
    for(int i=1;i<=n;i++){
      sum+=ceil(b[i].h/x)*b[i].a;//计算杀死所有怪物英雄生命值的损失,向上取整
    }
    for(int i=1;i<=n;i++){//原来是枚举每一次的最后一击!!!
      if(y-sum+b[i].a>0){
        puts("YES");//没死就yes
        flag=1;
        break;
      }
    }
    if(!flag) puts("NO");//死了呃
  }
}

posted @ 2021-02-08 22:13  RuanCat  阅读(66)  评论(0)    收藏  举报