竹子 题解

更好的阅读体验

竹子 题解

赛题来自 OIFHA 第四场模拟赛。

原题展现

青蛙哥种了 n n n 棵竹子,一开始第 i i i 棵竹子的高度为 h i h_i hi,每天会长高 a i a_i ai。由于竹子长得太快,青蛙哥不得不砍掉一些竹子,但是,每次只能砍下一截长度为 p p p 的竹子,而且为了防止刀具磨损,青蛙哥每天只能用刀砍 k k k 次。如果一个竹子的高度不足 p p p,显然砍完之后高度不能为负数,而应该是 0 0 0

青蛙哥想知道,他砍了 m m m 天之后,最高的一棵竹子的最低高度是多少。每天先砍竹子,砍完后竹子才会生长。

Solution

思考一手,根据数据范围,先看看二分能不能解决:是否可能 m m m 天后竹子的高度都不超过 X X X

因为这个竹子被削减到 0 0 0 之后,不可能削减到负数,不好做。所以需要转换。

这道题难就难在转换。

考虑将“砍”和“长”的概念反过来:一开始竹子的高度都是 X X X,每天都会“自然削减” a i a_i ai,如果削减到负数,就失败;否则就可以在所有的竹子中选出 k k k 棵“拔高” p p p

通过这样的转换后,我们可以把一些拔高的机会积攒起来,留到以后使用。 m m m 天后,看看是否所有的竹子高度都至少为 h i h_i hi,决定了是否有可能成功。

这样一来,问题就清晰了很多。确定二分可做,可以开始考虑 check() 了。

  • 每天都有 k k k 次“拔高”机会,如果有竹子今天就要削减到负数,就“拔高”这棵竹子;没有机会了,就不行。多余的机会可以积攒。
  • m m m 天后,如果一棵竹子的高度 h ′ < h h'<h h<h,就要用 ⌈ h ′ − h p ⌉ \lceil \frac{h'-h}{p}\rceil phh 次机会来补足 h h h 的高度。同上,如果没有机会了,就失败了。

至于“每棵竹子至多什么时候削减到负数”这个东西,可以用数组储存一下。说白了就是记录这棵竹子什么时候寄。

c i = ⌊ X a i ⌋ c_i=\lfloor \frac{X}{a_i}\rfloor ci=aiX

这个式子就不解释了,自己思考,非常显然。

那么第 i i i 天该“拔高“哪些竹子呢?

根据上文得到的 c i c_i ci,可以丢进小根堆里。如果堆顶(快要寄的竹子)在当天就要“拔高”了,就开始使用机会次数;否则就积攒这些机会次数。

Code

#include <bits/stdc++.h>
using namespace std;#define int long long
#define pii pair<int, int>
#define ft first
#define sd secondconst int MAXN = 1e5 + 5;int n, m, k, p;
int h[MAXN], a[MAXN], b[MAXN], c[MAXN];bool check(int md) {priority_queue<pii, vector<pii>, greater<pii>> q;for (int i = 1; i <= n; i++) {b[i] = md;c[i] = md / a[i];q.push({ c[i], i });}int day = 0;for (int i = 1; i < m; i++) {day += k;while (!q.empty() && q.top().ft == i) {int j = q.top().sd;q.pop();if (day <= 0)return 0;--day;b[j] += p;c[j] = b[j] / a[j];q.push({ c[j], j });}}day += k;for (int i = 1; i <= n; i++) {int hh = b[i] - a[i] * m;if (hh < h[i])day -= ceil(1.0 * (h[i] - hh) / p);}return day >= 0;
}signed main() {scanf("%lld%lld%lld%lld", &n, &m, &k, &p);for (int i = 1; i <= n; i++) scanf("%lld%lld", &h[i], &a[i]);int l = a[1], r = a[1] * m + h[1];for (int i = 2; i <= n; i++) l = max(l, a[i]), r = max(r, a[i] * m + h[i]);int ans = -1, mid;while (l <= r) {mid = l + r >> 1;if (check(mid))ans = mid, r = mid - 1;elsel = mid + 1;}printf("%lld\n", ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13.XXL-JOB应用

XXL-JOB应用 1.介绍 XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台 2.XXL-JOB与Quartz的关系 老版本依赖Quartz的定时任务触发&#xff0c;在V2.1.0版本开始移除了Quartz 3.官方地址 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/gitee&#xf…

面试经典 150 题 - 多数元素

多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1…

搜索引擎优化:利用Python爬虫实现排名提升

什么是搜索引擎优化&#xff08;SEO&#xff09; 搜索引擎优化&#xff08;SEO&#xff09;是通过优化网站内容和结构&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而增加网站流量和曝光度的技术和方法。SEO的目标是使网站在搜索引擎结果页面中获得更高这个过程包括吸…

windows11上安装虚拟机VMware

1、安装虚拟机&#xff08;待补充&#xff09; 第二步&#xff1a;安装VMware tools 实现windows文件上传到虚拟机中 1、安装好虚拟机后&#xff0c;查看虚拟机ip用Xshell连接虚拟机&#xff0c;并安装VMware tools(只有安装了VMware tools才能实现虚拟机和本机的文件共享。在…

python:socket基础操作(2)-《udp发送信息》

基础发送udp信息 1.导入socket模块 2.使用udp模块 3.发送内容 4.关闭套接字 很简单的4步就可以实现udp的消息发送 import socket # 导入模块udp_socket socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 使用ipv4 udp协议udp_socket.sendto(b"hello world",(&…

代码随想录算法训练营第二十七天| 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;candidate的元素个数为n,从n的n次方中选出可能的组合&#xff0c;大于目标则抛弃该组合&#xff0c;进行回溯 java&#xff1a; class Solu…

Bit Extraction and Bootstrapping for BGV/BFV

参考文献&#xff1a; [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.[AP13] Alperin-Sheriff J, Pe…

爬虫requests+综合练习详解

Day2 - 1.requests第一血_哔哩哔哩_bilibili requests作用&#xff1a;模拟浏览器发请求 requests流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 持续化存储 爬取搜狗首页的页面数据 import requests# 指定url url https://sogou.com # 发起请求 resp…

Leetcode刷题笔记题解(C++):670. 最大交换

思路&#xff1a; 假设数字 9923676 从右边找最大的数字的下标maxindex&#xff0c;然后向左边寻找小于最大数字的数的下标&#xff0c;直到找到最左边&#xff0c;交换两者得出新的数字&#xff0c;比如从左到右递减的数字如9621则不需要变化&#xff0c;在寻找中记录这种数…

系统问题排查定位流程

1. 系统问题排查范围定义 本次交流中描述的故障&#xff0c;主要是指系统级别的故障&#xff0c;对于某个具体的业务功能的故障&#xff0c;不在本次讨论范围内。下面描述的故障定位、排查&#xff0c;主要是指跨模块、跨项目级别的故障的定位、排查&#xff0c;包括软件、硬件…

媒体查询怎么监视不同的设备?

media 媒体查询是CSS中用于根据不同的媒体类型或特定的设备条件应用样式的一种方式。通过媒体查询&#xff0c;你可以使网页在不同的屏幕大小、分辨率或设备类型下呈现不同的样式。 基础语法 media media-type and (media-feature) {/* 样式规则 */ }media-type&#xff1a;媒…

LeetCode 热题 100 | 滑动窗口

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周&#xff0c;语言是 C 1 3. 无重复字符的最长子串 解题思路&#xff1a; 设置两个指针&#xff0c;左指针和右指针&#xff0c;二者之间形成窗口右指针不断右移&#xff0c;新字母被纳…

阿里云优惠整理,最新2024阿里云优惠政策解读

阿里云优惠政策有哪些&#xff1f;2024年阿里云优惠政策风向改了&#xff0c;之前一直是老用户与狗的营销策略&#xff0c;今年阿里云2核2G、3M固定带宽服务器99元居然开启了老用户购买权限&#xff0c;并且续费不涨价&#xff0c;阿里云这波操作确实让用户赢麻了&#xff0c;在…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫…

任意模数多项式乘法MTT(可拆系数FFT)详解

更好的阅读体验 任意模数多项式乘法 前言&#xff1a; 在教练讲的时候脑子并不清醒&#xff0c;所以没听懂。后来自己看博客学会了&#xff0c;但目前只学了一种方法&#xff1a;可拆系数FFT。为了方便日后复习&#xff0c;决定先写下这个的笔记&#xff0c;关于三模数NTT下次…

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…

Linux常规操作指南

1. 文件系统操作 &#xff08;1&#xff09;查看当前目录内容 ls或查看详细信息&#xff1a; ls -l&#xff08;2&#xff09;切换工作目录 cd /path/to/directory&#xff08;3&#xff09;创建新目录 mkdir directory_name&#xff08;4&#xff09;删除空目录 rmdir d…

【胡寿松 自动控制原理】【考研冲刺加分神器】各院校考研例题详细讲解

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    本专栏中包含【胡寿松 自动控制原理】专业课的例题讲解&#xff0c;适合考研冲刺阶段学习&#xff0c;该视频只适合作为辅助教学视频来使用&#xff0c…

B2107 图像旋转 题解

开篇话 这道题乍一看还挺难的&#xff0c;但是发现方法后就好办了。 简便做法 首先开一个二维数组 &#xfffd; 105 , 105 a 105,105 ​ &#xff08;我的前教练告诉我&#xff0c;数组开得比数据范围大 5 5 是个好习惯&#xff09;。 这道题让我们将读入的二维数组&am…

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock 一种情况说明 挂载ISO文件进入救援模式&#xff0c;无法挂载XFS文件系统&#xff0c;xfs_repair也是报未知的超级块 使用 xfs_info 可以取到 xfs文件系统分区信息 xfs_db -c “sb 0” -c “p” $your_xfs_dev 也能…