【李老师】CSP200-第10课:二分答案

李CSP200

2024-07-12 7:52:50
2024-07-13 9:52:50

信息与公告

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

// 二分模板
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、例题:#11579. 求平方根

using ll = long long;
int main() {
    ll x;
    cin >> x;
    ll l = 0, r = x + 1;
    while (l < r) {
        ll m = (r - l) / 2 + l;
        if (m * m >= x)
            r = m;
        else
            l = m + 1;
    }
    if (l * l == x)
        cout << l;
    else
        cout << l - 1;
    return 0;
}
状态 题目 统计
求平方根 6 / 6
工资计算 4 / 7
木材 5 / 7