GESP 五级 · GESP 202603 C++ 五级 第 10 题

选择题 · 答案 A · 考点:二分答案

← 整套速查表 GESP 五级 全部真题

题目

给定 $n$ 根木头,第 $i$ 根长度为 $a[i]$。要切成不少于 $m$ 段等长木段,求最大可能长度,则横线上应填写( )。

const int MAXN = 100005;
long long a[MAXN];
int n, m;

bool check(long long x){
    long long cnt = 0;
    for(int i = 1; i <= n; i++){
        if(x == 0) return true;
        cnt += a[i] / x;
        if(cnt >= m) return true;
    }
    return false;
}

int main(){
    cin >> n >> m;
    long long mx = 0;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        mx = max(mx, a[i]);
    }

    long long l = 1, r = mx;
    long long ans = 0;

    while(l <= r){
        long long mid = l + (r - l) / 2;

        if(check(mid)){
            ans = mid;
            ________
        }else{
            ________
        }
    }

    cout << ans << endl;
    return 0;
}
答案:A

考点

二分答案

解题思维

逻辑代数运算:与(∧/×)、或(∨/+)、非(┐/¬)。德摩根律:┐(A∧B)=┐A∨┐B,┐(A∨B)=┐A∧┐B。

常见错误

注意德摩根律的正确应用:┐(A∧B)=┐A∨┐B,┐(A∨B)=┐A∧┐B。C++中逻辑运算符有短路求值特性。

详细解析(节选)

【考点】二分答案|贪心策略|边界处理

🎯 考纲定位

GESP 五级《算法与程序设计》模块,考查二分查找在"答案空间单调性"问题上的应用。命题人卡住的是:考生看到求最大值就条件反射用贪心,却忘了这道题最优解一定在可行解集合的边界——必须用二分去"逼近"那个临界值。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断