【Codeforces 1296D】Fight with Monsters(简单模拟)

D. Fight with Monsters
Codeforces1276D(1)
Codeforces1276D(2)
题意:
有n个野兽 排成一排
第i个野兽有hi点生命值
你的攻击力等于 a点生命值 你的对手的攻击力等于b点生命值

你和你的对手现在正在对抗这些野兽
一开始 你和你的对手都到第一个野兽那里打它 直到打死
然后去第二个野兽那里 知道打死它
以此类推

当一个野兽的生命值小于等于0时 则认为这个野兽死了

然后你和你的对手轮流打这个怪兽 如果你打死了这个怪兽 那你你获得一点经验值 如果是你的对手打死的那就没有

对于每一次打怪 你都是先手(不管是谁杀了上一个怪)

现在你有一种科技 能够让你的对手停止一次攻击 这种科技最多使用k次

现在 求出 你最多得到多少点经验值


这个可以看出就是一个简单的模拟题

题解:
把每一次循环打的部分都直接在输入的时候就去掉

那剩下的就是怪兽最多不超过一轮攻击的血量了 那这个时候因为我们总是先手
那么现在这个时候对手就不能出手了 所以此时 怪兽剩下的血量越少 对得到这个经验就越有利

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxx=2e5+10;

int a,b,k,n,h[maxx];

int main(){
	scanf("%d%d%d%d",&n,&a,&b,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&h[i]);
		//从这个对这个数据处理一下
		h[i]=h[i]-(h[i]/(a+b))*(a+b);
		//这里有  正好这样一轮一轮的打 打死的可能
		if(h[i]==0){
			h[i]=a+b;
		} 
		//处理这一种可能
		if(h[i]%a==0){
			h[i]=h[i]/a-1;
		}
		else{
			h[i]=h[i]/a;
		}
		//这个样子就是  对于每一个怪而言  需要用的科技的次数了 
	}
	sort(h+1,h+1+n);
	
	int sum=0;
	for(int i=1;i<=n;i++){
		if(h[i]>k){
			break;
		}
		sum++;
		k-=h[i];
	}
	
	printf("%d\n",sum);
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值