第10课:二分答案

潘CSP200班

2024-07-12 13:59:49
2024-08-11 19:36:30

信息与公告

二分查找:找到满足条件的第1个值的下标,如果没找到则输出n(r的初始值)。

1、整数二分模板

int l=0, r=n;  // 确定查找区间[l, r-1]
while(l<r)
{
	int m=(r-l)/2+l;   // 本质上等价于(l+r)/2,但可避免爆int
	if(满足条件)    	
		r=m;		
	else		
		l=m+1;		
}
cout<<l<<endl;    // 答案等于满足条件的第1个值

2、实数二分模板

double l=0, r=n; 
while(l+(1e-6)<r)  //本质上等价于r-l > 1e-6,即误差小于10-6时看作相等
{
	double mid=(l+r)/2;
	if(满足条件)
		r=mid;	
	else
		l=mid;	
}
printf("%.2f",l);   
状态 题目 统计
求平方根 7 / 7
工资计算 6 / 7
木材 6 / 7