2017年1月ACM留校培训——二分专题

二分法是程序设计中非常常用的一种算法,比赛中经常会使用到,在我参加的这些比赛里,几乎每一场比赛都会有多多少少涉及到二分法的题目。二分法不仅仅是用来比较一个数在一个数列里所处的大小位置,有时候还有很多更巧妙的用法。

 

需要注意的是,要使用二分法解决的问题,答案一定是随着已知参数单调递增或者递减的,就是说你要寻找的那个解,他的解空间一定是有序的。

 

比赛中的题目一般都是直接二分搜索答案,将搜索的那个值放到一个函数中进行判定,根据是否满足条件,调整要搜索的解空间,判定函数中可能会用到贪心思想。

 

例题1:大白书《挑战程序设计竞赛》P140

假定一个解并判断是否可行

poj 1064 二分 Cable master

http://blog.csdn.net/qdbszsj/article/details/49556457

 

 

例题2:大白书《挑战程序设计竞赛》P142

最大化最小值,假定解后进行贪心,看是否可行

poj 2456 二分 Aggressive cows

http://blog.csdn.net/qdbszsj/article/details/49556489

 

例题3:HDU 4430 数学+二分,这种题不常见,主要练习upper_bound,lower_bound

直接在一堆数里搜答案,可以用upper_bound,lower_bound

hdu4430 Yukari'sBirthday 2012 ACM_ICPC Asia ChangChun Regional Contest problem K

http://blog.csdn.net/qdbszsj/article/details/48688649

intb=*lower_bound(a,a+9,21);

b=lower_bound指针指向的位置的值。

lower指向第一个大于等于要求的那个点,upper指向第一个大于要求的那个点

upper_bound(a,a+9,5)-lower_bound(a,a+9,5)可用来求有序数组中某值的个数

在set,map里:

a=s.upper_bound(3)//a是一个指针,s是一个set或者map

 

 

习题1:

poj 3258 二分 River Hopscotch

http://blog.csdn.net/qdbszsj/article/details/54234133

 

习题2:

JNUOJ 1151 方杯子,这个题目是我出的,是个公式题,修改一下数据提高一下需要的精度,就需要使用二分了,这个题可以不用做,看一下了解思路就行。

http://jnuacm.club:8080/jnuoj/problem_show.php?pid=1151

 

 

习题集:

见大白书P283

poj 3273

poj 3104

poj 3045

poj 2976

poj 3111

poj 3579

poj 3685

poj 2010

poj 3662

poj 1759

poj 3484

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值