原因是我做题的时候从看到这道题到把这道题AC了都没想到要用二分,结果做完看题解清一色让用二分解决。初初做算法题,遇到这情况很兴奋啊,觉得自己搞出什么新东西了,然后看到三年前的触手@yummy击杀21篇题解之壮举(,第二批杀掉的和我思路差不多,因为才接触,算法分析能力不太行,就来问问什么情况。 我是从平均往下缩,当然也肯定不是像被毙掉的那样用枚举:
#include<iostream>
using namespace std;
int main(){
int n;
int k;
int ac_k=0;
int ans;
int max_dis=0;
scanf("%d",&n);
scanf("%d",&k);
int wood[n];
long long sum=0;
for(int i=0;i<n;i++){
scanf("%d",&wood[i]);
sum+=wood[i];
}
ans=sum/k;
if(ans==0){
cout<<0;
return 0;
}
long long sub_need;
for(int i=0;i<n;i++){
ac_k+=wood[i]/ans;
if(max_dis<wood[i]%ans){
max_dis=wood[i]%ans;
sub_need=wood[i]/ans+1;
}
}
while(ac_k<k){
if((ans-max_dis)%(sub_need)){
ans-=(ans-max_dis)/(sub_need)+1;
}else{
ans-=(ans-max_dis)/(sub_need);
}
ac_k++;
for(int i=0;i<n;i++){
ac_k+=wood[i]/ans;
if(max_dis<wood[i]%ans){
max_dis=wood[i]%ans;
sub_need=wood[i]/ans+1;
}
}
}
cout<<ans;
return 0;
}