1 条题解
-
0
简单二分。
#include <bits/stdc++.h> using namespace std; int n,m,maxLen,l=1,r; int a[101]; bool check(int x){ int cnt=0; for (int i=1;i<=n;i++){//统计在每段长x的情况下最多切成几段 cnt+=a[i]/x; } return cnt>=m; } int main(){ cin>>n; for (int i=1;i<=n;i++){ cin>>a[i]; maxLen=max(maxLen,a[i]); } cin>>m; if (maxLen<m){//如果最大长度小于段数,说明无法切割 cout<<"Failed"; return 0; } r=maxLen; while (l<=r){ int mid=(l+r)>>1; if (check(mid)){ l=mid+1; }else{ r=mid-1; } } cout<<r; return 0; }
- 1
信息
- ID
- 410
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 5
- 标签
- 递交数
- 217
- 已通过
- 77
- 上传者