1 条题解
-
0
- 二分常用于具有单调性的问题、或者最大值最小的问题。
- 通常情况下:最大值最小这类问题,需要二分第一个最,check第二个最。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6+5, INF = 0x3f3f3f3f, MOD = 1E9 + 7; int n,c,a[N]; // 最近距离 x 是否合法 bool check(int x){ int s=1; for(int i=2, p=1; i<=n; i++) { if(a[i] - a[p] >= x){ p = i, s ++; } } return s >= c; } void solve(){ cin>>n>>c; for(int i=1; i<=n; i++) cin>>a[i]; sort(a+1, a+1+n); int l=1, r=1e9, ans=l; while(l <= r){ // 二分最大值 int mid = l+r >> 1; if(check(mid)) l=mid+1, ans=mid; else r=mid-1; } cout<<ans<<endl; } int main() { // freopen("in.txt", "r", stdin); int t=1; // cin>>t; while(t--){ solve(); } return 0; }
- 1
信息
- ID
- 318
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 15
- 已通过
- 12
- 上传者