文章目录

  • 题目
  • 思路
  • 代码

题目


思路

首先最大值最小考虑二分,假设我们检验 xxx
但是发现检验比较难写
尝试从图像分析
那么画出来图像大致如下:

然后我们发现可以将图像上移末端重合至 (m,x)(m,x)(m,x) 点

那么只需要倒推改成每天减小 aia_iai​ 高度,每天有 kkk 次机会增加 ppp,保证初始高度大于hih_ihi​ 即可

然后首先可以想到一个类似堆的做法,每次要死了就加,没来得及加的机会存下来
最后调整高度
时间复杂度 O(mklognlogA)O(mklog nlogA)O(mklognlogA)
发现可以更简单在每个必死时间点存储,
倒推要死的时候增加
最后调整高度就可以不用堆
时间复杂度 O(mklogA)O(mklogA)O(mklogA)

代码

#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
int read(){bool f=0;int x=0;char c=getchar();while(c<'0'||'9'<c){if(c=='-')f=1;c=getchar();}while('0'<=c&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return !f?x:-x;
}
#define mp make_pair
const int MAXN=100000;
const int INF=0x3f3f3f3f;
typedef pair<int,int> pii;
LL n,m,k,p;
LL h[MAXN+5],a[MAXN+5];
queue<pii> q[MAXN+5];
bool check(LL x){for(int i=1;i<=m;i++)while(!q[i].empty())q[i].pop();for(int i=1;i<=n;i++){LL s=x/a[i]+1;if(s<=m) q[s].push(mp(i,0));}for(int i=1,c=0;i<=m;i++,c+=k){while(!q[i].empty()){if(!c) return 0;c--;pii u=q[i].front();q[i].pop(),u.second++;LL s=(u.second*p+x)/a[u.first]+1;if(s<=m) q[s].push(u);}}LL s=0;for(int i=1;i<=n;i++)s+=(max(h[i]+a[i]*m-x,0ll)+p-1)/p;return s<=m*k;
}
int main(){//freopen("bamboo.in","r",stdin);//freopen("bamboo.out","w",stdout);n=read(),m=read(),k=read(),p=read();LL L=0,R=0;for(int i=1;i<=n;i++)h[i]=read(),a[i]=read(),R=max(R,h[i]+m*a[i]);while(L+1<R){LL Mid=(L+R)>>1;if(check(Mid)) R=Mid;else L=Mid;}printf("%lld\n",R);return 0;
}

Mr. Kitayuta vs. Bamboos[二分+贪心][图像分析]相关推荐

  1. CF506 C Mr. Kitayuta vs. Bamboos (贪心)

    题意 有n根竹子,初始高度是h[i],每天结束时会长高a[i],每天你可以砍K刀,一刀能减小p的高度.可以在某一天内砍相同的竹子多次.问m天结束后,最高的竹子最矮是多高. n≤1e5,k≤10,m≤5 ...

  2. CF506C Mr. Kitayuta vs. Bamboos

    CF506C Mr. Kitayuta vs. Bamboos 有nnn个竹子,第iii棵竹子第一天之前的高度是hih_ihi​,每一天的末尾会长高aia_iai​ 每一天你可以将砍kkk刀,每一刀将 ...

  3. Mr. Kitayuta vs. Bamboos

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

  4. [CF505E]Mr. Kitayuta vs. Bamboos/[海军国际项目办公室]迷途竹林

    Mr. Kitayuta vs. Bamboos 迷途竹林事实上就是经TiwAirOAO\color{red}{TiwAirOAO}TiwAirOAO巨佬扩大数据范围强化后的版本.真的是强化了吗 不过 ...

  5. 【IOI2020国家集训队作业 Part 1】CF505E Mr. Kitayuta vs. Bamboos

    题目 题目描述 Mr. Kitayuta's garden is planted with nn bamboos. (Bamboos are tall, fast-growing tropical p ...

  6. CF505E-Mr. Kitayuta vs. Bamboos【贪心,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/CF505E 题目大意 开始一个长度为nnn的序列hhh,mmm天每天你可以kkk次选择一个hih_ihi​让它等于h ...

  7. [CF506C]Mr. Kitayuta vs. Bamboos

    Description 有n个竹子,第i个竹子长度为h[i],每天的结束会长高a[i] 现在有m天,每一天可以做k次操作,每次操作可以选择一个竹子砍掉p,即高度h[i]=max(h[i]-p,0) 你 ...

  8. 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)

    CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...

  9. 【每日一题】8月12日题目精讲 Mr. Kitayuta, the Treasure Hunter

    来源:牛客网: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 The Shuseki I ...

最新文章

  1. filazilla搭建ftp_Windows7下利用FileZilla Server搭建ftp
  2. 洛谷 p3372 模板-线段树 1
  3. 计算机管理员四级,计算机四级基本知识点
  4. maven配置sqlServer的依赖
  5. Linux线程的同步,linux线程同步
  6. ElasticSearch配置说明
  7. (转载)网络互联参考模型(详解)
  8. 英语词根词缀总结整合版
  9. java正态分布的概率密度函数_正态分布概率密度函数
  10. Qt开源作品35-秘钥生成器
  11. 第8章.商品详情页面之thymeleaf
  12. android客户端动态折线图
  13. 为什么会有许多人认为C盘太满会影响电脑运行速度?
  14. C/C++ 用递归(分治法)解决多米诺骨牌问题
  15. 中国人保为中环盛达环保科技集团承保产品责任险,为消费者保驾护航
  16. 【5G核心网】5G概念以及名词缩写解释
  17. linux下更新Cmake,包括cmake下载缓慢解决方案
  18. Vue+TS+子组件回调父组件的方法
  19. 计算机连接的共享网盘怎么删掉,老司机详解百度网盘的分享链接怎么取消
  20. 公共广播系统中的背景音响系统

热门文章

  1. android 动态、静态壁纸实现
  2. 安装MySQL报错:Failing package is: mysql-community-client-5.7.40-1.el7.x86_64 GPG Keys are configured as
  3. 基于航空RFID行李处理应用方案
  4. phpMyadmin /scripts/setup.php Execute Arbitrary PHP Code Via A Crafted POST Request CVE-2010-3055
  5. 印度市场救不了苹果手机,也救不了库克
  6. vue 前端进行tab页面切换时,要求不刷新
  7. esp8266 OTA 云远程更新固件 wifiupdate
  8. GBase 8c产品架构
  9. 163vip邮箱登录,163邮箱怎么登陆?如何登录163vip邮箱?
  10. IOM计算机组成原理,计算机组成原理设计教案.doc