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

来源:互联网 发布:linux ssh服务宕了 编辑:程序博客网 时间:2024/06/01 09:18

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

 

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

 

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

 

例题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

 

 

1 0
原创粉丝点击