二分初解(一) 洛谷 P1083 [NOIP2012 提高组] 借教室

最近团队训练二分专题,颇有体悟。

二分题解第一篇,主要讲述如何判断是否使用二分以及大部分二分的“模板”,以及一些附带的“私货”。

总的来说,如果一个题的答案以及计算的过程是单调的,就大概率可以用二分优化(个人理解),大体的模板便是一个check()函数加上一个while()循环。

先来看看 洛谷的P1083 [NOIP2012 提高组] 借教室这道题

看到题目时我就有了一个明确的想法,每一个订单出现后,将在这个订单中的出现的日期的限制中的每天的教室数都减去这个订单所要借的数目,当哪一个订单出现后,有某天的教室数小于0时就输出这一订单编号。

这时经过粗略计算,并根据题目所给的数据范围我可以很确定的说如果暴力(几个for循环嵌套)肯定超时,那么这时候发现订单的顺序是递增的,租借的数目是递减的,就可以用二分去缩减订单的范围,直到最终剩下的唯一解输出。

二分循环如下:

    while(l<y){//二分,用来判断l到第y天的天数中是否有负数,最终缩减范围,输出答案
		int mid=l+(y-l)/2;
		if(check(mid)==false){
			y=mid;
		}else l=mid+1;
	}

当然二分模板好写,

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值