题目大意:

n 只怪兽,每只的血量为 h[i] ,你的攻击力为 a ,你的对手攻击力为 b

打每只怪兽时,都是你先出手,然后你的对手出手,这样轮流攻击

如果是你给予了怪兽最后一击,你就能得到一分

你还有 k 次机会能让你的对手暂停行动一回合

问你最多能拿到多少分

解题思路:

记你加上你的对手两个人各攻击一次造成的伤害为 s=a+b

贪心可得,如果想节省那 k 次机会,应该和对手一起把怪兽耗到只剩一点血,即能在最后一回合杀死的情况时

即怪兽减去的血量为 s 的倍数,表示经过了这么多回合后,怪兽的血量降到了 s 以内,能够决定是你或者你的对手给予的最后一击了

对于血量的计算,可以用 h=(h-1)%s+1 来降低到 1~s 的范围内

然后判断这个 h ,如果h属于1~a,说明肯定是你击败这只怪兽,直接点数加一,考虑下一只

但如果是在 a+1~s 这个区间,说明如果你不使用那 k 次机会的话,会由对手给予最后一击

而如果要使用这些机会,则需要使用【 (h-a)/a 向上取整】次机会才行

贪心易得,需要把这些机会从小到大排序,然后先把机会用在需要次数少的怪兽上

全部处理完后输出答案即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
vector<ll> v;
ll n,a,b,k,s,h,d,i,len,ans=;
cin>>n>>a>>b>>k;
s=a+b;
while(n--){
cin>>h;
d=(h-)%s+;
if(d<=a)
ans++;
else
v.push_back(d-a);
}
sort(v.begin(),v.end());
len=v.size();
for(i=;i<len;i++){
d=(v[i]+a-)/a;//向上取整
if(k>=d){
k-=d;
ans++;
}
}
cout<<ans<<'\n';
}
int main(){
ios::sync_with_stdio();
cin.tie();cout.tie();
solve(); return ;
}

Codeforces 1296D - Fight with Monsters的更多相关文章

  1. Codeforces - 102222H - Fight Against Monsters - 贪心

    https://codeforc.es/gym/102222/problem/H 题意:有一堆怪兽,怪兽有HP和ATK.你有一个英雄,英雄每次先被所有怪兽打,然后打其中一个怪兽.打的伤害递增,第一次1 ...

  2. Codeforces Round #617 (Div. 3) D. Fight with Monsters

    D : Fight with Monsters 题目大意 : 有一组数,每个值对应着一个怪物的 hp 值,现在有两个人,一个自己一个对手,每个人有一个攻击值, 两个人轮流攻击怪物,如果是自己将怪物先打 ...

  3. D. Fight with Monsters

    D. Fight with Monsters time limit per test 1 second memory limit per test 256 megabytes input standa ...

  4. Codeforces #617 (Div. 3) D. Fight with Monsters(贪心,排序)

    There are nn monsters standing in a row numbered from 11 to nn . The ii -th monster has hihi health ...

  5. Codeforces 954D Fight Against Traffic(BFS 最短路)

    题目链接:Fight Against Traffic 题意:有n个点个m条双向边,现在给出两个点S和T并要增加一条边,问增加一条边且S和T之间距离不变短的情况有几种? 题解:首先dfs求一下S到其他点 ...

  6. Codeforces 488C Fight the Monster

    Fight the Monster time limit per test             1 second                                   memory ...

  7. 2018 ACM-ICPC 宁夏 H.Fight Against Monsters(贪心)

    It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...

  8. 2019 ICPC 银川网络赛 H. Fight Against Monsters

    It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...

  9. codeforces 487a//Fight the Monster// Codeforces Round #278(Div. 1)

    题意:打怪兽.可增加自己的属性,怎样在能打倒怪兽的情况下花费最少? 这题关键要找好二分的量.一开始我觉得,只要攻击到101,防御到100,就能必胜,于是我对自己的三个属性的和二分(0到201),内部三 ...

随机推荐

  1. PV & PVC【转】

    Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volume 来自 AWS EB ...

  2. 关于Orcale 11g 安装过程

    1.前往Oracle官网下载相应安装包 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.h ...

  3. 解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.

    本文转自Linux社区作者为z-sm的文章 原文链接http://www.linuxidc.com/Linux/2016-07/133066.htm 之前一直使用的是ubuntu,后来安装了Cento ...

  4. R 创建一个空的数据框

    k = 16 #数据框的行数 z = data.frame( a = numeric(k), b = numeric(k), c = numeric(k), d = numeric(k) )

  5. 兼容和Error

    兼容 IE兼容 ie没有forEach if(!Array.prototype.forEach) { Array.prototype.forEach = function(fun){ var len ...

  6. LeetCode160 相交链表(双指针)

    题目: click here!!题目传送门 思路: 1.笨方法 因为如果两个链表相交的话,从相交的地方往后是同一条链表,所以: 分别遍历两个链表,得出两个链表的长度,两个长度做差得到n,然后将长的链表 ...

  7. 根据上传的MultipartFile通过springboot转化为File类型并调用通过File文件流的方法上传特定服务器

      @PostMapping("uploadExcel") public ResponseObj uploadExcel(@RequestParam("excelFile ...

  8. linux下安装jdk&&Tomcat环境

    linux系统 Centos6 下部署应用服务 jdk-1.7 环境安装:(切换到root用户下操作)1. 在 /usr/local 目录下创建jdk7文件 mkdir /usr/local/jdk7 ...

  9. 自动填充IP地址

    在windows下的DOS窗口中 要利用Netsh命令,进入到DOS下的网络配置状态,就能实现各种网络配置. 进入IP设置模式 在DOS环境中,设置网络参数之前,必须先进入IP设置模式才可以.先打开系 ...

  10. zoj 1483 划分类DP

    还是看了little_w大神写的才知道怎么写,看完发现自己题意也理解错了,里面有个neighboring,意思就是你指定任务的时候指定的是原序列中连续的一段 然后就是怎么DP了,新学了个很好的dp模型 ...