竹子(?)

青蛙哥种了 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 天之后,最高的一棵竹子的最低高度是多少。每天先砍竹子,砍完后竹子才会生长。

1 ≤ n ≤ 1 0 5 , m ≤ 5000 , k ≤ 10 , 0 ≤ p , h i , a i ≤ 1 0 9 1\le n\le10^5,m\le5000,k\le10,0\le p,h_i,a_i\le10^9 1n105,m5000,k10,0p,hi,ai109


首先二分答案 X X X,判断 m m m 天之后是否所有竹子高度不超过 X X X

由于砍的长度不一定为 p p p,贪心不可行。考虑把全过程反过来看:一开始竹子高度都不超过 X X X(实际上就是等于 X X X),每天竹子会缩短 a i a_i ai 长度(如果长度为负,就不合法),然后你可以给竹子加 k k k 次长度 p p p m m m 天后,竹子高度至少为 h i h_i hi

现在贪心就好做了。首先每天的 k k k 次操作可以统筹分配,分到其他天。前 m − 1 m-1 m1 天,如果有竹子在接下来一天会变成负数,就给它加长度。到了第 m m m 天,如果竹子高度小于 h i h_i hi,也要加长度。

实现上可以用优先队列维护竹子在哪天需要加长度。到了第 i i i 天就处理优先队列队头的数据。

时间复杂度 O ( ( n + m k ) log ⁡ n log ⁡ V ) O((n+mk)\log n\log V) O((n+mk)lognlogV) V V V 是值域。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+1;
const ll INF=1e18;
ll n,m,k,p,h[N],a[N],b[N],c[N];
ll la[N<<2],Max[N<<2],Maxnum[N<<2];
bool check(ll mid)
{priority_queue<pair<ll,ll>,vector<pair<ll,ll> >,greater<pair<ll,ll> > > q;for(int i=1;i<=n;i++) b[i]=mid;for(int i=1;i<=n;i++) c[i]=mid/a[i],q.push(make_pair(c[i],i));ll num=0;for(int i=1;i<m;i++){num+=k;while(q.top().first==i){int id=q.top().second;q.pop();if(!num) return 0;num--;b[id]+=p;c[id]=b[id]/a[id];q.push(make_pair(c[id],id));}}num+=k;for(int i=1;i<=n;i++){ll sum=b[i]-a[i]*m;if(sum<h[i]) num-=(h[i]-sum+p-1)/p;}return num>=0;
}
int main()
{// freopen("bamboo.in","r",stdin);// freopen("bamboo.out","w",stdout);cin.tie(0)->sync_with_stdio(0);cin>>n>>m>>k>>p;ll l=0,r=2e15,ans;for(int i=1;i<=n;i++) cin>>h[i]>>a[i],l=max(l,a[i]),r=max(r,a[i]*m+h[i]);while(l<=r){ll mid=l+r>>1;if(check(mid)) r=mid-1,ans=mid;else l=mid+1;}cout<<ans;
}

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

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

相关文章

东南大学研究生课程《计算机网络体系结构》期末考试英文缩写-全称词汇表大全

前言 东南大学计算机科学与工程学院/软件学院在研一学期会开一门C类必修课程《计算机网络体系结构》&#xff08;这里的必修&#xff0c;是计入学分&#xff0c;评优评奖算成绩的意思&#xff0c;这门课其实也不是必须得上&#xff0c;依旧是选修&#xff0c;其实这门课算必修…

四.Winform使用Webview2加载本地HTML页面并互相通信

Winform使用Webview2加载本地HTML页面并互相通信 往期目录本节目标核心代码实现HTML代码实现的窗体Demo2代码效果图 往期目录 往期相关文章目录 专栏目录 本节目标 实现刷新按钮点击 C# winform按钮可以调用C# winform代码显示到html上点击HTML按钮可以调用C# winform代码更…

性能优化-OpenCL kernel 开发

「发表于知乎专栏《移动端算法优化》」 本文主要介绍OpenCL的 Kernel&#xff0c;包括代码的实例以及使用注意的详解。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教…

神策 CDP 获评中国软件评测中心「优秀大数据产品」

近日&#xff0c;中国软件评测中心在第十三届软件大会上揭晓了「第十五期优秀大数据产品、解决方案和案例测评结果」。神策数据基于客户旅程编排的客户数据平台&#xff08;CDP&#xff09;1.3.0 凭借出色的产品能力获评「优秀大数据产品」&#xff0c;并获得大数据基础设施类产…

linux 安装 grafana

Ubuntu 和 Debian(64 位)SHA256&#xff1a; e551434e9e3e585633f7b56a33d8f49cda138d92ad69c2c29dcec2c3ede84607 sudo apt-get install -y adduser libfontconfig1 muslwget https://dl.grafana.com/enterprise/release/grafana-enterprise_10.2.3_amd64.debsudo dpkg -i gra…

Java leetcode简单刷题记录3

Java leetcode简单刷题记录3 汇总区间&#xff1a; https://leetcode.cn/problems/summary-ranges/ 把数据按照是否连续分组输出 主要是 n<nums.length-1 && nums[n]1nums[n] 最多可以摧毁的敌人城堡&#xff1a; https://leetcode.cn/problems/maximum-enemy-fort…

SV学习——数据类型(1)

文章目录 1. 内建数据类型2. 用户自定义3. 枚举类型 1. 内建数据类型 SV中引入新的数据类型logic&#xff0c;SV作为侧重于验证的语言&#xff0c;并不十分关切logic对应的逻辑应该被综合位寄存器还是线网&#xff0c;因为logic被使用的场景如果是验证环境&#xff0c;那么它只…

【HarmonyOS】体验鸿蒙电商平台的未来之旅!

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

Linux调试分析诊断工具 strace

strace是个功能强大的Linux调试分析诊断工具&#xff0c;可用于跟踪程序执行时进程系统调用 (system call) 和所接收的信号&#xff0c;尤其是针对源码不可读或源码无法再编译的程序。在Linux系统中&#xff0c;用户进程不能直接访问计算机硬件设备。当进程需要访问硬件设备(如…

Linux 的提示符太长了,帮你精简一下

普通用户修改文件 ~/.bashrc 修改 50 行左右的代码&#xff0c;将两个w改为大写的W 如果是root用户则修改文件/root/.bashrc&#xff0c;同样的方法。

接口自动化测试框架设计

文章目录 接口测试的定义接口测试的意义接口测试的测试用例设计接口测试的测试用例设计方法postman主要功能请求体分类JSON数据类型postman内置参数postman变量全局变量环境变量 postman断言JSON提取器正则表达式提取器Cookie提取器postman加密接口签名 接口自动化测试基础getp…

从 fatal 错误到 sync.Map:Go中 Map 的并发策略

为什么 Go 语言在多个 goroutine 同时访问和修改同一个 map 时&#xff0c;会报出 fatal 错误而不是 panic&#xff1f;我们该如何应对 map 的数据竞争问题呢&#xff1f; 这篇文章将带你一步步了解背后的原理&#xff0c;并引出解决 map 并发问题的方案。 Map 数据竞争 首先…

【Golang】Perl 正则表达式语法的支持示例

背景 在 Golang 中&#xff0c;标准库的正则表达式包 regexp 是基于 RE2 语法的&#xff0c;并不直接支持 Perl 正则表达式的全部功能。虽然 Golang 的标准库并不直接提供对 Perl 正则表达式的支持&#xff0c;但是您可以使用第三方库来实现与 Perl 兼容的正则表达式功能。 一…

node介绍

1.node是什么 Node是一个基于Chrome V8引擎的JS运行环境。 Node不是一个独立的语言、node不是JS框架。 Node是一个除了浏览器之外的、可以让JS运行的环境 Node.js是一个让JS运行在服务端的开发平台&#xff0c;是使用事件驱动&#xff0c;异步非阻塞I/O&#xff0c;单线程&…

【SpringBoot技术专题】「开发实战系列」Undertow web容器的入门实战及调优方案精讲

Undertow web容器的入门实战及调优方案精讲 Undertow web容器Undertow 介绍官网API给出一句话概述Undertow&#xff1a;官网API总结特点&#xff1a;Lightweight&#xff08;轻量级&#xff09;HTTP Upgrade Support&#xff08;支持http升级&#xff09;、HTTP/2 Support支持H…

提升网站关键词排名的工具

随着互联网的蓬勃发展&#xff0c;网站的关键词排名成为衡量网站流量和曝光度的重要指标。在这个竞争激烈的数字时代&#xff0c;站在搜索引擎结果的前列变得至关重要。为了实现这一目标&#xff0c;合理利用关键词排名优化工具是必不可少的。本文将重点介绍147SEO软件&#xf…

《WebKit 技术内幕》之八(1):硬件加速机制

《WebKit 技术内幕》之八&#xff08;1&#xff09;&#xff1a;硬件加速机制 1 硬件加速基础 1.1 概念 这里说的硬件加速技术是指使用GPU的硬件能力来帮助渲染网页&#xff0c;因为GPU的作用主要是用来绘制3D图形并且性能特别好&#xff0c;这是它的专长所在&#xff0c;它…

【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

腾讯云tsf平台-部署微服务项目

腾讯云tsf平台-部署微服务项目 一、腾讯云tsf平台简介二、部署准备0&#xff08;数据库、中间件等部署&#xff09;三、部署准备1&#xff08;创建集群和命名空间&#xff09;1、准备部署资源--集群2、使用容器部署微服务步骤 1&#xff1a;创建容器集群步骤 2&#xff1a;创建…

htb Analysis wp

施工中 Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-20 23:15 EST Nmap scan report for 10.129.7.235 Host is up (0.47s latency).PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp open http Microsoft…