@[lucy2012](/user/1252442)
k 没初始化,最后应该输出 r
(因为是最小满足条件的时间)函数中当 x 为负数时,没有跳过该衣服的烘干过程。因为在计算 x 时,应该用 a * mid 而不是 a。每次循环开始时也得将 k 应该初始化为 0。
正解:
```cpp
#include <bits/stdc++.h>
using namespace std;
int s[500010];
int n, a, b;
bool check(int mid) {
int k = 0;
for (int i = 1; i <= n; i++) {
int x = s[i] - a * mid;
if (x <= 0) continue;
int y = x / b;
if (x % b != 0) y++;
k += y;
if (k > mid) return false;
}
return true;
}
int main() {
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
cin >> s[i];
int l = 0, r = 500010;
while (l + 1 < r) {
int mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
cout << r << endl;
return 0;
}
```
by TPJ_XiaoJing @ 2024-04-05 12:04:41
@[lucy2012](/user/1252442)
by TPJ_XiaoJing @ 2024-04-05 12:27:32
@[TPJ_XiaoJing](/user/1280061) 谢谢!我其实是想用sum的
```cpp
#include<bits/stdc++.h>
using namespace std;
int s[500010];
int n,a,b,i,l=0,r=500010,mid;
bool check(int mid){
int sum=0,x,y;
for(i=1;i<=n;i++){
x=s[i]-a*mid;
if(x<=0) continue;
y=x/b;
if(x%b!=0) y++;
sum+=y;
if(sum>mid) return 0;
}
if(sum<=mid) return 1;
return 0;
}
int main()
{
cin>>n>>a>>b;
for(i=1;i<=n;i++)
cin>>s[i];
while(l<r)
{
mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l;
return 0;
}
```
by lucy2012 @ 2024-04-05 12:38:32