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

先二分答案转为判定最大值是否能<=$x$, 考虑如何进行判定.

直接贪心看的话很难办, 可能先砍当前较高的, 也可能砍最快的.

考虑将问题转化, 即初始高度均$x$, 每天结束时降低$a_i$, 可以选$k$棵拔高$p$, 要求每天竹子都不能降低到负数, 并且最后一天竹子高度$\ge h_i$

这样的话我们贪心, 每次选取最快降低到0的竹子一定是最优的, 因为拔高不会再产生浪费.

#include <iostream>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <set>
#include <map>
#include <string>
#include <vector>
#include <string.h>
#include <queue>
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define hr putchar('\n')
#define pb push_back
#define mp make_pair
#define mid (l+r>>1)
#define lc (o<<1)
#define rc (lc|1) using namespace std;
typedef long long ll;
const int P = 1e9+7;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {
ll r=1%P;
for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;
return r;
}
ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;} const int N = 2e5+10;
int a[N], h[N], f[N], n, m, k, p;
struct _ {
ll day, id;
bool operator < (const _ & rhs) const {
return day>rhs.day;
}
}; priority_queue<_> q; bool check(ll x) {
memset(f, 0, sizeof f);
while (!q.empty()) q.pop();
REP(i,1,n) if (x-(ll)a[i]*m<h[i]) q.push({x/a[i],i});
REP(i,1,m) REP(j,1,k) {
if (q.empty()) return 1;
_ u = q.top();q.pop();
if (u.day<i) return 0;
if (x+(ll)p*++f[u.id]-(ll)m*a[u.id]<h[u.id]) {
q.push({(x+(ll)p*f[u.id])/a[u.id],u.id});
}
}
return q.empty();
} int main() {
scanf("%d%d%d%d", &n, &m, &k, &p);
REP(i,1,n) scanf("%d%d",h+i,a+i);
ll l=0, r=1e15, ans;
while (l<=r) check(mid)?ans=mid,r=mid-1:l=mid+1;
cout<<ans<<endl;
}

Mr. Kitayuta vs. Bamboos CodeForces - 505E (堆,二分答案)的更多相关文章

  1. Mr. Kitayuta vs. Bamboos

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

  2. 「CF505E」 Mr. Kitayuta vs. Bamboos

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

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

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

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

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

  5. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划

    There are n people and k keys on a straight line. Every person wants to get to the office which is l ...

  6. Codeforces 371C Hamburgers (二分答案)

    题目链接 Hamburgers 二分答案,贪心判断即可. #include <bits/stdc++.h> using namespace std; #define REP(i,n) fo ...

  7. CF505E Mr. Kitayuta vs. Bamboos

    cf luogu 要使得最高的柱子高度最小,考虑二分这个高度,那么剩下的就是要指定一个操作方案,使得最终每个柱子高度\(\le mid\) 因为有个柱子高度不会\(<0\)的限制,所以正着模拟不 ...

  8. 506C Mr. Kitayuta vs. Bamboos

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

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

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

随机推荐

  1. php检查是否是数字和字母

    /* 检查是否是数字和字母* php内置函数ctype_alnum检查字符串是否是数字和字母,或者两者混合* $string*/ public function is_numandlitter($st ...

  2. 20145206邹京儒 Exp8 Web基础

    20145206邹京儒 Exp8 Web基础 一.实践过程记录 Apache (一)环境配置 1.查看端口占用:在这里apach2占用端口80 2.测试apache是否正常工作:在kali的火狐浏览器 ...

  3. CreateDirectory 创建文件夹 C\C++

    函数原型: CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 简介: CreateD ...

  4. EditText输入属性

    1. android:inputType="none" android:inputType="text" android:inputType="tex ...

  5. Python3基础 os.path.splitext 处理文件名,得到文件名+扩展名

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. 启动jenkins服务错误

    背景 重新安装了jenkins,需要启动,使用的yum install安装的,启动jenkins的话只需要执行service jenkins start,但出了两个问题 1. 是提示找不到java 2 ...

  7. Spring的面向切面

    Spring的面向切面 在应用开发中,有很多类似日志.安全和事务管理的功能.这些功能都有一个共同点,那就是很多个对象都需要这些功能.复用这些通用的功能的最简单的方法就是继承或者委托.但是当应用规模达到 ...

  8. java Request 获得用户IP地址

    public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader(" ...

  9. 【安装】Microsoft SQL Server的安装

    数据库版本:2012 系统环境:windows 7 一.安装 依次选择“安装->全新 SQL Server 独立安装或向现有安装添加功能”;点“确定” 选择版本,推荐标准版,这里是直接输入序列号 ...

  10. 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流

    19.1 引言 前一章我们介绍了TCP连接的建立与释放:三握四挥,以及状态转移图. TCP报文段分为:交互数据,以及成块数据(下一章介绍). 交互数据:例如telnet,ssh,这种类型的协议在大多数 ...