CF1066D Boxes Packing(二分答案)
题意描述:
你有$n$个物品,每个物品大小为$a_i$,$m$个盒子,每个盒子的容积为$k$。$Maksim$先生想把物品装入盒子中。对于每个物品,如果能被放入当前的盒子中,则放入当前盒子,否则换一个新的盒子放入。为了放入尽可能多数量的物品,$Maksim$先生会从左开始扔掉一部分物品。现在,$Maksim$先生想知道,他最多能放入盒子多少物品
输入输出格式:
输入格式:
第一行,三个整数$n$,$m$,$k$,$(1≤n,m≤2 \times 10^5$,$ 1≤k≤10^9)$含义参见上文
第二行,$n$ 个数,第$i$表示$a_i$
输出格式:
一行,一个数,表示$Maksim$先生能放入盒子里的最多的物品数量
思路:
水题。。。
因为他挑选的规则一定,而删除的方式一定,所以,答案拥有单调性。
单调性:因为有一个最大合法点,在那之后都是合法的,所以再往后走的话,答案一定越来越小
所以我们的目的就是找这个最大合法点。
怎么找呢?
因为挑选方式一定,所以合法性可以O(n)验证。
这样的话,很显然就可以用一个东西叫二分答案
二分合法点就好了qwq
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
using namespace std;
int n,m,k;
int a[];
bool check(int wz)
{
int now=,cnt=;
for(rii=wz;i<=n;i++)
{
if(a[i]>k)
{
return false;
}
if(now+a[i]>k)
{
now=;
cnt++;
}
now+=a[i];
}
if(cnt>m)
{
return false;
}
return true;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(rii=;i<=n;i++)
{
scanf("%d",&a[i]);
}
int l=,r=n;
while(l<r)
{
if(r-l==)
{
if(check(l)==true)
{
break;
}
else
{
if(check(r)==true)
{
l=r;
}
else
{
l=n+;
}
break;
}
}
int mid=(l+r)/;
if(check(mid)==true)
{
r=mid;
}
else
{
l=mid;
}
}
printf("%d",n-l+);
}
CF1066D Boxes Packing(二分答案)的更多相关文章
- CF1066D Boxes Packing
传送门 这题为什么要用二分呢?/huaji 首先可以\(O(n)\)预处理出从某个物品\(i\)开始放,只放一个盒子,能放的最后物品的位置\(j\),只要用两个指针维护左右端点,每次移动一下左端点同时 ...
- HDU 4190 Distributing Ballot Boxes【二分答案】
题意:给出n个城市,n个城市分别的居民,m个盒子,为了让每个人都投上票,问每个盒子应该装多少张票 二分盒子装的票数, 如果mid<=m,说明偏大了,r应该向下逼近 ,r=mid 如果mid> ...
- Codeforces 551C GukiZ hates Boxes 二分答案
题目链接 题意: 一共同拥有n个空地(是一个数轴,从x=1 到 x=n),每一个空地上有a[i]块石头 有m个学生 目标是删除全部石头 一開始全部学生都站在 x=0的地方 每秒钟每一个学生都 ...
- Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 贪心/二分
C. GukiZ hates Boxes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/ ...
- Boxes Packing
Boxes Packing Mishka has got n empty boxes. For every i (1 ≤ i ≤ n), i-th box is a cube with side le ...
- CH Round #72树洞[二分答案 DFS&&BFS]
树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...
- [CF752E]Santa Claus and Tangerines(二分答案,dp)
题目链接:http://codeforces.com/contest/752/problem/E 题意:给n个橘子,每个橘子a(i)片,要分给k个人,问每个人最多分多少片.每个橘子每次对半分,偶数的话 ...
- [NOIP2011] 聪明的质检员(二分答案)
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[L ...
- Codeforces Round #377 (Div. 2) D. Exams(二分答案)
D. Exams Problem Description: Vasiliy has an exam period which will continue for n days. He has to p ...
随机推荐
- Revit
log file Windows Vista or Windows 7:%LOCALAPPDATA%\Autodesk\Revit\Autodesk Revit 2016\Journals
- 139.00.007 Git学习-Cheat Sheet
@(139 - Environment Settings | 环境配置) Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了. 友情附赠国外网 ...
- 任务十三:零基础JavaScript编码(一)
任务目的 JavaScript初体验 初步明白JavaScript的简单基本语法,如变量.函数 初步了解JavaScript的事件是什么 初步了解JavaScript中的DOM是什么 任务描述 参考以 ...
- Java Collections Framework知识结构目录
The core collection interfaces are the foundation of the Java Collections Framework. The Java Collec ...
- 如何编写自定义hive UDF函数
Hive可以允许用户编写自己定义的函数UDF,来在查询中使用.Hive中有3种UDF: UDF:操作单个数据行,产生单个数据行: UDAF:操作多个数据行,产生一个数据行. UDTF:操作一个数据行, ...
- 微信公众号 报token验证失败
最近两天一直碰到token验证失败的问题,如下图所示 然后上网疯狂的搜索答案,碰到的人还真不少,原因大概有这几个: 1)服务器URL未实名认证 2)token重名(基本不可能) 3)服务器部署的项目 ...
- c# 依赖注入之---反射(转)
详细请看http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 定义一个接口,和两个类(实现该接口) IButton: using ...
- DatagramSocket类 会发生线程阻塞的方法
遇到这个问题,还告诉别人错了,这里来Mark一下. receive()方法会使调用线程阻塞. Java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是 ...
- iotop使用详解
iotop是top和iostat程序的混合体,能够显示系统中所有运行进程并将进程根据I/O统计信息排序. 这个软件使用了Linux内核的一些新特性,所以需要2.6.20或者更新的内核. 一般默认情况下 ...
- 工作好搭档(三):慧想 S100 液晶显示器支架
引言:工欲善其事,必先利其器.码农十年,与电脑打了二十多年的交道,也配置了一些过得去的装备.资金有限,更希望所有的投入都在刀刃上.写工作好搭档系列,是晒考虑的原因.思路.经验和教训.欢 ...