Mr. Kitayuta vs. Bamboos[二分+贪心][图像分析]
文章目录
- 题目
- 思路
- 代码
题目
思路
首先最大值最小考虑二分,假设我们检验 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[二分+贪心][图像分析]相关推荐
- CF506 C Mr. Kitayuta vs. Bamboos (贪心)
题意 有n根竹子,初始高度是h[i],每天结束时会长高a[i],每天你可以砍K刀,一刀能减小p的高度.可以在某一天内砍相同的竹子多次.问m天结束后,最高的竹子最矮是多高. n≤1e5,k≤10,m≤5 ...
- CF506C Mr. Kitayuta vs. Bamboos
CF506C Mr. Kitayuta vs. Bamboos 有nnn个竹子,第iii棵竹子第一天之前的高度是hih_ihi,每一天的末尾会长高aia_iai 每一天你可以将砍kkk刀,每一刀将 ...
- Mr. Kitayuta vs. Bamboos
Mr. Kitayuta vs. Bamboos 题目链接:http://codeforces.com/problemset/problem/505/E 参考:http://blog.csdn.net ...
- [CF505E]Mr. Kitayuta vs. Bamboos/[海军国际项目办公室]迷途竹林
Mr. Kitayuta vs. Bamboos 迷途竹林事实上就是经TiwAirOAO\color{red}{TiwAirOAO}TiwAirOAO巨佬扩大数据范围强化后的版本.真的是强化了吗 不过 ...
- 【IOI2020国家集训队作业 Part 1】CF505E Mr. Kitayuta vs. Bamboos
题目 题目描述 Mr. Kitayuta's garden is planted with nn bamboos. (Bamboos are tall, fast-growing tropical p ...
- CF505E-Mr. Kitayuta vs. Bamboos【贪心,二分】
正题 题目链接:https://www.luogu.com.cn/problem/CF505E 题目大意 开始一个长度为nnn的序列hhh,mmm天每天你可以kkk次选择一个hih_ihi让它等于h ...
- [CF506C]Mr. Kitayuta vs. Bamboos
Description 有n个竹子,第i个竹子长度为h[i],每天的结束会长高a[i] 现在有m天,每一天可以做k次操作,每次操作可以选择一个竹子砍掉p,即高度h[i]=max(h[i]-p,0) 你 ...
- 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)
CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...
- 【每日一题】8月12日题目精讲 Mr. Kitayuta, the Treasure Hunter
来源:牛客网: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 The Shuseki I ...
最新文章
- filazilla搭建ftp_Windows7下利用FileZilla Server搭建ftp
- 洛谷 p3372 模板-线段树 1
- 计算机管理员四级,计算机四级基本知识点
- maven配置sqlServer的依赖
- Linux线程的同步,linux线程同步
- ElasticSearch配置说明
- (转载)网络互联参考模型(详解)
- 英语词根词缀总结整合版
- java正态分布的概率密度函数_正态分布概率密度函数
- Qt开源作品35-秘钥生成器
- 第8章.商品详情页面之thymeleaf
- android客户端动态折线图
- 为什么会有许多人认为C盘太满会影响电脑运行速度?
- C/C++ 用递归(分治法)解决多米诺骨牌问题
- 中国人保为中环盛达环保科技集团承保产品责任险,为消费者保驾护航
- 【5G核心网】5G概念以及名词缩写解释
- linux下更新Cmake,包括cmake下载缓慢解决方案
- Vue+TS+子组件回调父组件的方法
- 计算机连接的共享网盘怎么删掉,老司机详解百度网盘的分享链接怎么取消
- 公共广播系统中的背景音响系统
热门文章
- android 动态、静态壁纸实现
- 安装MySQL报错:Failing package is: mysql-community-client-5.7.40-1.el7.x86_64 GPG Keys are configured as
- 基于航空RFID行李处理应用方案
- phpMyadmin /scripts/setup.php Execute Arbitrary PHP Code Via A Crafted POST Request CVE-2010-3055
- 印度市场救不了苹果手机,也救不了库克
- vue 前端进行tab页面切换时,要求不刷新
- esp8266 OTA 云远程更新固件 wifiupdate
- GBase 8c产品架构
- 163vip邮箱登录,163邮箱怎么登陆?如何登录163vip邮箱?
- IOM计算机组成原理,计算机组成原理设计教案.doc