L---泰拉瑞亚---2023河南萌新联赛第(三)场:郑州大学

链接:登录---专业IT笔试面试备考平台_牛客网

来源:牛客网

示例1

输入

复制代码
1 10
3 5

输出

复制代码
3

说明

只有一把回旋镖,你可以先打两次伤害为3的,再打一次倾尽全力的,造成的伤害为5。总伤害为3+3+5=11,即可获得胜利。

示例2

输入

复制代码
2 100
1 30
1 20

输出

复制代码
52

说明

你可以先把第一把倾尽全力打出去,造成30伤害。接下来用第二把连续攻击50次,造成50伤害。最后把第二把也打出去,造成20伤害。总伤害为30+50+20,即可击杀。

解析:

贪心,计算出 "重复扔" 伤害的最大值 mx,然后把比mx伤害高的全部 "全力" 扔出,最后剩余的血量用mx重复扔即可。

这里有个疑问,如果"重复扔"的最大伤害和 "全力扔" 的最大伤害是同一把飞镖 p ,那么这样计算不会把这个 p 也扔出去吗?

不影响结果,因为这个飞镖 p 的"全力扔"伤害比"重复扔"高,那么最后一次必定会全力扔 p ,所以可以先计算进去,不影响结果。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,h,mx,a[N],cnt,t;
int main(){
	scanf("%d%d",&n,&h);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&t,&a[i]);
		mx=max(mx,t);
	}
	sort(a+1,a+1+n);
	reverse(a+1,a+1+n);
	for(int i=1;h>0&&i<=n;i++){
		if(a[i]>mx) h-=a[i],cnt++;
		else break;
	}
	if(h>0&&h%mx) cnt++;
	printf("%d",h>0?cnt+h/mx:cnt);
	return 0;
}
相关推荐
水饺编程8 小时前
Visual Studio 软件操作:添加附加依赖项
c语言·c++·windows·visual studio
fengfuyao9858 小时前
经典MUSIC算法程序以及测角精度与阵元间距、阵元数、信噪比、快拍数等的关系
算法
十八岁讨厌编程8 小时前
【算法训练营 · 补充】LeetCode Hot100(下)
算法·leetcode·职场和发展
-To be number.wan8 小时前
C++ 进阶技巧:如何让 cout << 自定义对象 正常输出?
开发语言·c++
一路往蓝-Anbo8 小时前
C语言从句柄到对象 (三) —— 抛弃 Malloc:静态对象池与索引句柄的终极形态
c语言·开发语言·数据结构·stm32·单片机·算法
序属秋秋秋9 小时前
《Linux系统编程之进程控制》【进程创建 + 进程终止】
linux·c语言·c++·操作系统·进程·进程创建·进程终止
fantasy_arch9 小时前
SVT-AV1 B帧决策和mini-GOP决策分析
算法·av1
声声codeGrandMaster9 小时前
逻辑回归-泰坦尼克号
算法·机器学习·逻辑回归
集芯微电科技有限公司9 小时前
PC1001超高频率(50HMZ)单通单低侧GaN FET驱动器支持正负相位配置
数据结构·人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络·fpga开发
一路往蓝-Anbo9 小时前
C语言从句柄到对象 (二) —— 极致的封装:不透明指针与 SDK 级设计
c语言·开发语言·数据结构·stm32·单片机·嵌入式硬件