题目分析;
- 注意
1
c
m
1cm
1cm都凑不出来的情况,
r
由
1
变
为
0
r由1变为0
r由1变为0,这个时候如果在进入
c
h
e
c
k
check
check函数,
a
[
i
]
/
0
a[i]/0
a[i]/0就会炸
Code:
#include <bits/stdc++.h>
using namespace std;
#define maxn 100010
int n,k,a[maxn];
inline int read_() {
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*f;
}
inline bool check_(int x) {
int tot=0;
for(int i=1;i<=n;++i) {
if(tot>=k) return true;
if(a[i]<x) continue;
else {
tot+=(a[i]/x);
}
}
if(tot>=k) return true;
else return false;
}
void readda_() {
n=read_();k=read_();
int r=0;
for(int i=1;i<=n;++i) {
a[i]=read_();
r=max(r,a[i]);
}
int l=0,ans=0,mid;
while(l<=r) {
if(r==0) break;
mid=(l+r)>>1;
if(check_(mid)) {
ans=mid;
l=mid+1;
}
else r=mid-1;
}
printf("%d",ans);
}
int main() {
freopen("a.txt","r",stdin);
readda_();
return 0;
}