cf

luogu

要使得最高的柱子高度最小,考虑二分这个高度,那么剩下的就是要指定一个操作方案,使得最终每个柱子高度\(\le mid\)

因为有个柱子高度不会\(<0\)的限制,所以正着模拟不太方便维护.考虑倒着模拟,那么问题可以转化成一开始有\(n\)个高度为\(mid\)的柱子,有\(m\)天,每天每个柱子先会减少\(a_i\)高度(还要保证柱子高度每个时刻\(\ge 0\)),然后每个可以操作\(k\)次,每次选一个柱子使得其高度增加\(p\),要使得最终每个柱子高度\(\ge h_i\)

现在要知道每次操作应该选哪个柱子操作.因为要保证柱子高度每个时刻\(\ge 0\),所以应该优先选择高度最快会\(<0\)的柱子操作,形式化的讲就是如果\(t\)时刻有柱子高度为\(he\),如果中途不操作,那么这个柱子在\(t+\lfloor\frac{he}{a_i}\rfloor+1\)时刻会\(<0\),所以要在这个时刻前增加他的高度.然后显然是选择高度马上就要\(<0\)的操作最优.注意过程中已经有高度\(<0\)就不合法,如果有往后一直不操作,最终高度可以\(\ge h_i\)的柱子就不用管了.这个可以用堆维护,最后看堆是否为空即可

#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double using namespace std;
const int N=1e5+10,M=5000+10;
LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,kk;
LL h[N],a[N],cv3;
struct node
{
int x,t;
LL h,d;
bool operator < (const node &bb) const {return d>bb.d;}
};
priority_queue<node> hp; int main()
{
///cfzmhs
n=rd(),m=rd(),kk=rd(),cv3=rd();
LL l=0,r=(LL)1e9*(m+1);
for(int i=1;i<=n;++i)
{
h[i]=rd(),a[i]=rd();
l=max(l,a[i]);
}
while(l<=r)
{
LL mid=(l+r)>>1;
while(!hp.empty()) hp.pop();
for(int i=1;i<=n;++i)
if(mid-a[i]*m<h[i])
hp.push((node){i,1,mid-a[i],mid/a[i]});
bool ok=1;
for(int i=1;ok&&i<=m;++i)
{
int rs=kk;
while(!hp.empty()&&rs)
{
node nw=hp.top();
hp.pop();
int x=nw.x;
if(nw.h-a[x]*(m-nw.t)>=h[x]) continue;
--rs;
nw.h-=a[x]*(i-nw.t);
if(nw.h<0) {ok=0;break;}
nw.h+=cv3;
hp.push((node){x,i,nw.h,i+nw.h/a[x]});
}
if(hp.empty()) break;
}
while(!hp.empty()&&hp.top().h-a[hp.top().x]*(m-hp.top().t)>=h[hp.top().x]) hp.pop();
ok&=hp.empty();
if(ok) r=mid-1;
else l=mid+1;
}
printf("%lld\n",r+1);
return 0;
}

CF505E Mr. Kitayuta vs. Bamboos的更多相关文章

  1. 「CF505E」 Mr. Kitayuta vs. Bamboos

    「CF505E」 Mr. Kitayuta vs. Bamboos 传送门 如果没有每轮只能进行 \(k\) 次修改的限制或者没有竹子长度必须大于 \(0\) 的限制那么直接贪心就完事了. 但是很遗憾 ...

  2. Mr. Kitayuta vs. Bamboos

    Mr. Kitayuta vs. Bamboos 题目链接:http://codeforces.com/problemset/problem/505/E 参考:http://blog.csdn.net ...

  3. Mr. Kitayuta vs. Bamboos CodeForces - 505E (堆,二分答案)

    大意: 给定$n$棵竹子, 每棵竹子初始$h_i$, 每天结束时长$a_i$, 共$m$天, 每天可以任选$k$棵竹子砍掉$p$, 若不足$p$则变为0, 求$m$天中竹子最大值的最小值 先二分答案转 ...

  4. 506C Mr. Kitayuta vs. Bamboos

    分析 代码 #include<bits/stdc++.h> using namespace std; #define int long long ],h[],now[],cnt[]; in ...

  5. @codeforces - 506C@ Mr. Kitayuta vs. Bamboos

    目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个竹子,第 i 个竹子初始高度 hi,在每天结束时将长高 a ...

  6. Codeforces 505E - Mr. Kitayuta vs. Bamboos(二分+堆)

    题面传送门 首先很显然的一点是,看到类似于"最大值最小"的字眼就考虑二分答案 \(x\)(这点我倒是想到了) 然鹅之后就不会做了/wq/wq/wq 注意到此题正着处理不太方便,故考 ...

  7. ACM: Mr. Kitayuta's Colorful Graph-并查集-解题报

    Mr. Kitayuta's Colorful GraphTime Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...

  8. CodeForces 505B Mr. Kitayuta's Colorful Graph

    Mr. Kitayuta's Colorful Graph Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d ...

  9. Codeforces Round #286 (Div. 2) B. Mr. Kitayuta's Colorful Graph dfs

    B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes in ...

随机推荐

  1. springboot内置分页技术

    1,在pom.xml中注入分页的配置 <dependency> <groupId>com.github.pagehelper</groupId> <artif ...

  2. selenium死活定位不到元素以及radio单选框点击不生效

    今天操作一个单选框浪费太多时间,现在其实很简单得东西,记录一下: 1,问题一,定位不到 如图,使用selenium IDE和xpath helper都试过,无法成功定位到这个单选框,实际上是因为,这个 ...

  3. swagger-ui 系统配置过程(基于spring+springmvc+swagger+springfox配置 web-api 管理系统)

    web工程部分框架信息:spring springmvc swagger springfox maven 参考文档:https://www.cnblogs.com/exmyth/p/7183753.h ...

  4. intellij import包 顺序调整

    intellij中自动import的包顺序与eclipse不太一致,可以参照以下方式进行调整: eclipse中(笔者用的是eclipse luna)导入包的顺序依次是: javajavaxorgco ...

  5. [GPU] Machine Learning on C++

    一.MPI为何物? 初步了解:MPI集群环境搭建 二.重新认识Spark 链接:https://www.zhihu.com/question/48743915/answer/115738668 马铁大 ...

  6. WampServer 下载以及安装问题 以及配置远程连接MYSQL

    WampServer 3.0 下载: http://dl.pconline.com.cn/download/52877-1.html 碰到的问题DDL无法添加,解决方法:MSVCR110.DLL fo ...

  7. 数学建模python matlab 编程(随机游走问题)

    1 (1). 随机游走问题.在-10到10的一维线段上,质点以1/5的概率用左运动1单位,以2/5的概率停止不动,以2/5的概率向右运动2单位,且碰到-10时向右运动3单位,碰到10时向左运动4单位. ...

  8. Chrome浏览器界面截图

    常常出现这么一个场景: 网页比较长,需要滚动屏幕才能看完整.这时候如需截屏,则比较麻烦. 如下为解决方法: 推荐Chrome浏览器: 按F12打开调试页面,同时按下ctrl + shift + p, ...

  9. ETH挖矿

    转载声明:http://www.120btc.com/baike/coin/1021.html (仅为了方便自己及原文章被删除) 最近以太坊大涨市值成为仅次比特币的第二大数字货币,那么以太坊(ETH) ...

  10. Maven Web 工程

    本教程将教您如何在Eclipse中创建 Archetype为 maven-archetype-webapp的Maven项目,也就是web工程. 创建Maven工程 第一步,启动Eclipse,依次打开 ...