Cashier 题解

xvl- / 2023-05-03 / 原文

题目传送门

一道贪心题。

我们可以记录每一位客人离开的时间,当下一位客人来临时,他们之间空闲的时间就是我们休息的时间。

for (int i = 1; i <= n; i++) {
    int t, l;
    cin >> t >> l;
    ans += (t - endt) / a;
    endt = t + l;
}

最后再加上所有客人都走后的空闲时间即可。

ans += (L - endt) / a;

最后给出代码

#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
int  n, L, a, endt, ans; // endt 表示上一位客人离开的时间
signed main() {
    ios :: sync_with_stdio(0);
    cin >> n >> L >> a;
    for (int i = 1; i <= n; i++) {
        int t, l;
        cin >> t >> l;
        ans += (t - endt) / a; // 计算空闲时间能休息多少次
        endt = t + l; // 更新 endt
    }
    ans += (L - endt) / a; // 最后计算所有客人都走后的空闲时间能休息多少次
    cout << ans;
    return 0;
}