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");//死了呃
}
}

浙公网安备 33010602011771号