链接:https://ac.nowcoder.com/acm/contest/13926/I
题目:
思路:
假如安装每k个装一箱,可以装a箱,剩下b个,此时最少的箱子装b个,考虑将前面a个箱子里面的个数分给最少的,容易想到平均地取前面a个箱子里面的个数,对前面的影响最小,假设要使得最少的箱子里面还差x个填满,则需要满足条件:k-b-x<=a*x。二分x获得答案。
代码:
#include<iostream>
using namespace std;
typedef unsigned long long ll;
int main(){
ll n,k;
cin>>n>>k;
ll a=n/k;
ll b=n%k;
if(b==0) {cout<<k<<endl;return 0;}
if(k-b-1<=a) {cout<<k-1<<endl;return 0;}
ll l=1,r=k-b+1;
while(l<r){
ll mid=(l+r)/2;
if(k-b-mid<=(a)*(mid)) r=mid;
else l=mid+1;
}
cout<<k-l<<endl;
return 0;
}