嗯...
题目链接:https://www.luogu.com.cn/problem/P1843
我们二分枚举时间,看看那些衣服在蒸发后还要用烘干机,则用cnt记录它的时间。
注意w数组在操作中不能变,尽量不要用ceil()。
AC代码:
1 #include<cstdio> 2 #include<cmath> 3 #include<iostream> 4 5 using namespace std; 6 7 int n,a,b,m; 8 int w[500005]; 9 10 inline bool check(int x){ 11 int cnt=0; 12 for(int i=1;i<=n;i++){ 13 int v=w[i]-a*x; 14 if(v>0){ 15 cnt+=v/b; 16 if(v%b) cnt++; 17 } 18 } 19 if(cnt>x) return 0; 20 return 1; 21 } 22 23 int main(){ 24 25 scanf("%d%d%d",&n,&a,&b); 26 for(int i=1;i<=n;i++) { scanf("%d",&w[i]); m=max(m,w[i]);} 27 int l=1,r=m; 28 while(l<r){ 29 int mid=(l+r)>>1; 30 if(check(mid)) r=mid; 31 else l=mid+1; 32 } 33 printf("%d ",r); 34 return 0; 35 }