6 条题解
-
4
二分+贪心
#include <bits/stdc++.h> using namespace std; #define Fe(i, l, r) for(int i = l; i <= r; ++ i) // 定义循环宏 const int N = 500005; int w[N], a, b, n; int W[N]; // 检查在x秒内是否能够将所有衣服晒干 bool check(int x){ Fe(i, 1, n){ W[i] = w[i]; // 计算每件衣服减去自然晒干后剩余的湿度 W[i] = W[i] - a * x; } int sum = 0; Fe(i, 1, n){ if(W[i] <= 0) continue; // 若衣服已经干了,则跳过 // 计算若使用烘干机则需要的时间 sum += W[i] / b; if(W[i] % b) sum += 1; // 如果还有剩余湿度,需要额外的时间 if(sum > x) return 0; // 如果所需时间超过x,则说明在x秒内无法完成晒干 } return 1; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> a >> b; Fe(i, 1, n){ cin >> w[i]; // 输入每件衣服的湿度 } int l = 0, r = N - 2; // 二分查找,找到晒干所有衣服所需的最少时间 while(l < r){ int mid = (l + r) >> 1; if(check(mid)){ r = mid; // 如果可以在mid时间内晒干,尝试缩小时间 } else { l = mid + 1; // 否则增加时间 } } cout << l << endl; // 输出最少所需时间 return 0; }
信息
- ID
- 936
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 576
- 已通过
- 38
- 上传者