二分
逆向思维,不直接求天数,而是二分枚举天数
二分的判断条件就是:将天数缩短至枚举出的天数时,最少需要消耗多少资源,若需要的资源大于m,则说明资源不够,缩短的天数应该减少,枚举应该往天数大的那边枚举,反之就是往天数小的那边枚举
#include<iostream>
using namespace std;
const int N = 1000010;
int n, m, k;
int c[N], t[N];
int main() {
cin >> n >> m >> k;
for (int i = 0; i < n; i ++) cin >> t[i] >> c[i];
int l = k, r = 100000;
while (l < r) {
int mid = l + r + 1 >> 1;
int tmp = 0;
for (int i = 0; i < n; i ++) {
if (t[i] > mid) tmp += (t[i] - tmp) * c[i];
}
if (tmp >= m) l = mid;
else r = mid - 1;
}
cout << r << endl;
return 0;
}