二分答案法

来源:互联网 发布:手机淘宝没有卖家中心 编辑:程序博客网 时间:2024/06/07 04:47

当一题求符合要求最小值或最大值,并且答案的范围可以确定时,可以使用二分答案法。

二分答案题的关键在于检验结果是否符合要求.


二分答案有多种写法


写法一 (同NOIP2017初赛试题的写法):

结果是mid.

- 找最大值

l = min_ans, r = max_ans;while(l < r) {        mid = (l + r + 1) / 2;if(Check(mid)) l = mid;else r = mid - 1;}


- 找最小值

l = min_ans, r = max_ans;while(l < r) {mid = (l + r + 1) / 2;if(Check(mid)) r = mid;else l = mid - 1;}



写法二:(不推荐的写法)

- 找最大值

l = min_ans, r = max_ans; //建议不要让l=0.while(l <= r) {mid = (l + r) / 2;if(Check(mid)) l = mid + 1;else r = mid - 1;}
结果是l-1.

- 找最小值

l = min_ans, r = max_ans;while(l <= r) {mid = (l + r) / 2;if(Check(mid)) r = mid + 1;else l = mid - 1;}




如果答案求的是浮点型,可以乘上10的次方,变为整数再二分答案,最后输出再除以这个数.

比如答案保留两位小数,就乘上100.