CF1059A Cashier 题解
Content
定义一天长度为 \(L\),每次休息的时间为 \(a\)。一天会有 \(n\) 个客人到访,第 \(i\) 个客人会在 \(t_i\) 的时刻到访,会停留 \(l_i\) 的时间。只有在没有客人的时候才能够休息,求最多能够休息的次数。
数据范围:\(0\leqslant n\leqslant 10^5,1\leqslant a\leqslant L\leqslant 10^9,0\leqslant t_i\leqslant L-1,1\leqslant l_i\leqslant L,t_i+l_i\leqslant t_{i+1},t_n+l_n\leqslant L\)。
Solution
我们求出每两个客人到访之间的空闲时间,然后依次可以求出每段空闲时间可以休息的次数,最后求和即可。
Code
int n, len, per, t[100007], l[100007], rest[100007], ans;
int main() {
scanf("%d%d%d", &n, &len, &per);
for(int i = 1; i <= n; ++i) {
scanf("%d%d", &t[i], &l[i]);
rest[i] = t[i] - (t[i - 1] + l[i - 1]);
}
rest[n + 1] = len - (t[n] + l[n]);
for(int i = 1; i <= n + 1; ++i) ans += (rest[i] / per);
printf("%d", ans);
return 0;
}