奶牛晒衣服
2024年12月25日大约 1 分钟
基础枚举+验证(77 分)
#include <bits/stdc++.h>
using namespace std;
int n, a, b;
int w[500000 + 5];
// 返回 ans 秒能否烘干所有衣服
bool check(int ans)
{
// 算“所有衣服需要的烘干机时间”之和
int sum = 0;
for (int i = 1; i <= n; i++)
{
// ans*a:ans 秒能自然烘干的量
// w[i]-ans*a:ans 秒还需要烘的量
// 上取整 (w[i]-ans*a)/b:需要占用烘干机的时间
if (w[i] - ans * a < 0)
continue;
sum += (w[i] - ans * a) / b;
if ((w[i] - ans * a) % b != 0)
sum++;
}
return sum <= ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
cin >> w[i];
for (int ans = 1;; ans++)
if (check(ans))
{
cout << ans;
break;
}
return 0;
}
验证的过程中不合法情况提前结束(100 分)
可以进一步优化为先考虑大的
#include <bits/stdc++.h>
using namespace std;
int n, a, b;
int w[500000 + 5];
// 返回 ans 秒能否烘干所有衣服
bool check(int ans)
{
// 算“所有衣服需要的烘干机时间”之和
int sum = 0;
for (int i = 1; i <= n; i++)
{
// ans*a:ans 秒能自然烘干的量
// w[i]-ans*a:ans 秒还需要烘的量
// 上取整 (w[i]-ans*a)/b:需要占用烘干机的时间
if (w[i] - ans * a < 0)
continue;
sum += (w[i] - ans * a) / b;
if ((w[i] - ans * a) % b != 0)
sum++;
if (sum > ans)
return false;
}
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
cin >> w[i];
for (int ans = 1;; ans++)
if (check(ans))
{
cout << ans;
break;
}
return 0;
}
二分
略