4 条题解
-
3
考虑二分答案(这好像跟楼上是两种思路)
#include<bits/stdc++.h> using namespace std; int n,m,a[100005],d; int c[100005]; bool check(int k){//验证此答案是否可行 int cnt=1,tmp=0; for(int i=2;i<=n;i++){ tmp+=c[i]; if(tmp>=k) cnt++,tmp=0; } if(cnt>=m) return true; else return false; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } sort(a+1,a+n+1); for(int i=2;i<=n;i++){ c[i]=a[i]-a[i-1];//差分 d=max(d,c[i]);//二分上界 } int l=0,r=d*2; int mid; while(l+1<r){//二分答案 mid=(l+r)>>1; if(check(mid)) l=mid; else r=mid; } printf("%d",l); return 0; }
信息
- ID
- 1012
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 43
- 已通过
- 10
- 上传者