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;
}
posted @ 2021-12-16 15:06  Eason_AC  阅读(34)  评论(0)    收藏  举报