1 条题解
-
0
思路
排序后按最早可放位置检验最小间隔;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