二分答案法

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

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


二分答案有多种写法


写法一 (同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.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值