碰到的一般题型:1.准确值二分查找,或者三分查找(类似二次函数的模型)。
2.与计算几何相结合答案精度要求比较高的二分查找,有时与圆有关系时需要用到反三角函数利用 角度解题。
3.不好直接求解的一类计数问题,利用二分直接枚举可能的结果,再检查是否符合题目要求。
4.区间求解,即利用两次二分分别查找有序序列左右上下限,再求差算出总个数。
题型知识补充:
1.
三分的一般写法:
1 double thfind(double left,double right) 2 { 3 double midmid,mid; 4 while(left + 1e-10 < right) 5 { 6 mid = (left + right)/2; 7 midmid = (mid+right)/2; 8 if(scla(mid) < scla(midmid)) 9 right = midmid; 10 else 11 left = mid; 12 } 13 return scla(left); 14 }
2.
PI = acos(-1.0);
一圈 = 2*PI;
3.
light oj 1076 Get the Containers;
4.
lower_bound(begin(),end(),stand);
upper_bounder(,,);
1 int Bsearch_lower_bound(int x) 2 { 3 int l = 0, r = n - 1, mid = 0; 4 while (l <= r) 5 { 6 mid = (l + r) >> 1; 7 if (a[mid] < x) l = mid + 1; 8 else r = mid - 1; 9 } 10 return l; 11 } 12 13 int Bsearch_upper_bound(int x) 14 { 15 int l = 0, r = n - 1, mid = 0; 16 while (l <= r) 17 { 18 mid = (l + r) >> 1; 19 if (a[mid] <= x) l = mid + 1; 20 else r = mid - 1; 21 } 22 return l; 23 }
虽然啥都干不好,但是还是得坚持呀。