33玄关QWQ

P1843 奶牛晒衣服

@[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


|