2021-5-22
这周主要是二分。(😔)想要提升的同学可以自己看一下三分,与二分类似结构。
1.hdu 2141
题意,给出n个不同的a和n个不同的b和n个不同的c,要求判断对于每个c是否存在a+b-c=0。
错误思路,1,最暴力的做法就是三个循环第一重循环是a第二重循环是b,第三重循环是c,如果这个c满足条件就把这个位置标记,最后输出标记的个数。
这种方法三重循环时间要求太高。
正确思路,写一个二重循环把a+b记录在数组中,然后对于每个c用二分查找。
细节,这题是一个判断类型的,每次判断mid是否等于c就可以了,如果不等于就向上或向下加减一。
总结,这题较为简单,是一道入门题,但是有点教训需记住1,思路需要经验,这题如果没做过很难想到会把c看为是a加b的和,这要求我们做题时要将题目中给出的公式或者图形进行一定的数学转化,这样会转换一种思路。
2,poj 2785
题意,有n个a,b,c,d判断有多少情况a+b+c+d为零。
错误思路,1,四重循环2,将a+b的值保存在map中下标是出现这个值出现的次数。然后再来二重循环把c+d算出来,加上下标的值,但是超时了。也不到为啥。
总结,这题给我提示二分不止可以求一个最值,有的时候就是可以简化时间。
3,hdu 1551
题意,将n段电线切成k段相同的长度,问每一段最大的长度值。
细节,1,r可以设置为n条电线中最长的一段2,因为是求最大值,所以应该是在l=mid+1的前面加上ans=mid.3.求最大值,也就是段数大的时候num小,在段数小的时候加上等于号,令ans可以缩小。
4,hoj 2651
细节,1,acos(-1.0)只能用-1.0不能用1 2,精度问题,所以将所有数扩大了一百万倍,以后做题时,一定想着转换精度的想法。
5,hdu 4190
细节,1,最小值是大于等于最小的城市人口。否则一直wrong。
二分就是可以节约时间,是一种基础性的算法,可以在有序数组中快速的寻找目标,也可以在无序的数组中找最值。虽然简单但是实用,虽然易学但是不会不行。建议同学做题熟练。
(写的不怎么好,还请各位同学指正。)