二分查找与二分答案都非常的奇妙,就像P2440 木材加工。
他倒是难了些,难度普及/提高−。
程序已经亮出来了:
#include<iostream>
using namespace std;
long long a[100001],n,k,mmax;
long long wood(int mid){
long long sum=0;
for(int i=0;i<n;i++){
sum+=a[i]/mid;
}
if(sum>=k) return 1;
else return 0;
}
int main(){
cin>>n>>k;
cin>>a[0];
mmax=a[0];
for(int i=1;i<n;i++){
cin>>a[i];
if(a[i]>mmax) mmax=a[i];
}
int low=0,high=mmax,mid;
while(low<=high){
mid=(low+high)/2;
if(mid<1){
cout<<0;
return 0;
}
if(wood(mid)){
low=mid+1;
}
else high=mid-1;
}
cout<<high;
}