3 条题解
-
3
#include<bits/stdc++.h> #define ll long long using namespace std; const int N = 50005; ll a[N]; ll L,n,m; bool check(ll lim){ int res = 0,cnt = 0; for(int i = 1;i <= n;i++){ if(res + a[i] - a[i - 1] >= lim) res = 0; else cnt++,res += a[i] - a[i - 1]; } return cnt <= m; } int main(){ cin >> L >> n >> m; for(int i = 1;i <= n;i++){ scanf("%d",&a[i]); } sort(a+1,a+1+n); ll ans = 0; ll l = 0,r = L,mid; while(l <= r){ mid = l+r>>1; if(check(mid)){ ans = mid; l = mid + 1; } else{ r = mid - 1; } } cout << ans << endl; return 0; }
`
-
2
#include #include #include #define ll long long using namespace std;
const int N = 50005;
ll a[N]; ll L,n,m;
bool check(ll lim){ int res = 0,cnt = 0; for(int i = 1;i <= n;i++){ if(res + a[i] - a[i - 1] >= lim) res = 0; else cnt++,res += a[i] - a[i - 1]; } return cnt <= m; }
int main(){ cin >> L >> n >> m; for(int i = 1;i <= n;i++){ scanf("%d",&a[i]); } //sort(a+1,a+1+n); ll ans = 0; ll l = 0,r = L,mid; while(l <= r){ mid = l+r>>1; if(check(mid)){ ans = mid; l = mid + 1; } else{ r = mid - 1; } } cout << ans << endl; return 0; }
-
1
#include<bits/stdc++.h> using namespace std; long long s,n,m,a[100000],r; bool check(int mid){ long long j=0,w=0; for(long long i=1;i<=n+1;i++){ if(w+a[i+1]-a[i]>=mid)w=0; else j++,w+=a[i+1]-a[i]; } return j<=m; } int main(){ cin>>s>>n>>m; a[1]=0,a[n+2]=s; for(int i=2;i<=n+1;i++){ cin>>a[i]; } int l=1,r=s,mid,ans=0; while(l<=r){ mid=(r+l)>>1; if(check(mid)){ ans=mid; l=mid+1; }else { r=mid-1; } } cout<<ans; return 0; }
- 1
信息
- ID
- 1030
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 25
- 已通过
- 17
- 上传者