本文共 696 字,大约阅读时间需要 2 分钟。
二分法模板
二分的核心思想是解决边界问题。对于整数的边界,我们通常会在计算时加一再减一,这样可以避免直接取到边界值导致的死循环问题。不过,对于浮点数来说,这种处理就不需要,因为直接除以2已经可以得到中间值了。
整数二分法
整数二分法通常分为三个部分:判定函数、查找函数以及主函数。
定义判定函数bool judge(int mid) { int a = ...; if (满足题意条件) { return true; } else { return false; } }
主函数int solve1() { int l, r, mid; // 根据题目定义初始值 while (条件不满足) { mid = (l + r) / 2; if (judge(mid)) { l = mid + 1; } else { r = mid; } } }
浮点数二分法
双变量solve1() { double l, r, mid; // 根据题目定义初始值 while (r - l > eps) { mid = (l + r) / 2; if (judge(mid)) { l = mid + eps; } else { r = mid - eps; } } return r; }
双变量solve2() { double l, r, mid; // 根据题目定义初始值 while (r - l > eps) { mid = (l + r) / 2; if (judge(mid)) { r = mid - eps; } else { l = mid + eps; } } return r; }
转载地址:http://rtagz.baihongyu.com/