题解:SP10108 BALLOT - Distributing Ballot Boxes
题意
有
思路
看到要求最多的最少,直接往二分答案上面想。发现此题的答案确实具有单调性,如果
简单讲讲 check 函数,假设一个城市有
最后注意此题有多组数据。
代码
#include<bits/stdc++.h>
using namespace std;
int n,b,a[500005],l,r,ans;
inline bool check(int qwq){
int sum=0;
for(int i=1;i<=n;i++){
sum+=ceil(1.0*a[i]/qwq);//加上该城市需要的投票箱数
if(sum>b){//超出了,退出
return 0;
}
}
return 1;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
while(cin>>n>>b){
if(n==-1&&b==-1){
return 0;
}
for(int i=1;i<=n;i++){
cin>>a[i];
}
l=0,ans=0,r=2000000;
while(l<=r){
int mid=(l+r>>1);
if(check(mid)){
r=mid-1;
ans=mid;
}
else{
l=mid+1;
ans=mid+1;
}
}
cout<<ans<<'\n';
}
return 0;
}
AC 记录。