http://tyvj.cn/p/1938
二分答案题目,找最大值当做r,然后check即可
参考代码:
#include<cstdio>
int n,m;
int a[102000];
int l=0, mid, r=0;
void init() {
scanf("%d%d", &n, &m);
for (int i=1;i<=n;i++) {
scanf("%d", &a[i]);
if (a[i]>r) r = a[i];
}
r++;
}
int check(int x) {
int ans=0;
for (int i=1;i<=n;i++) {
ans+=a[i]/x;
if (a[i]%x!=0) ans++;
}
if (ans>m) return 1; else return 0;
}
void go() {
while(l+1<r) {
mid = (l+r)/ 2;
if (check(mid)) l=mid; else r=mid;
}
printf("%d",l+1);
}
int main() {
init();
go();
return 0;
}