1 条题解

  • 0
    @ 2026-10-25 19:01:15

    思路

    排序后按最早可放位置检验最小间隔;N10万,位置含0和10亿,二分方向最大化可行距离。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n,c;cin>>n>>c;vector<long long>a(n);for(auto &x:a)cin>>x;sort(a.begin(),a.end());auto ok=[&](long long gap){int count=1;long long last=a[0];for(int i=1;i<n;i++)if(a[i]-last>=gap){count++;last=a[i];}return count>=c;};long long lo=0,hi=a.back()-a[0];while(lo<hi){long long mid=(lo+hi+1)/2;if(ok(mid))lo=mid;else hi=mid-1;}cout<<lo<<'\n';}
    
    • 1

    信息

    ID
    1414
    时间
    1000ms
    内存
    64MiB
    难度
    普及
    标签
    递交数
    1
    已通过
    1
    上传者