U102583.小蠢等公交1
普及-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
小蠢在公交站等车,车站有多条公交线路,每条线路的公交车以固定的间隔发车。小蠢可以在任意时刻到达车站,他想知道自己最少需要等待多长时间才能坐上任意一辆公交车。
题目描述:
给定 n 条公交线路,每条线路有两个参数:
发车间隔 ti (分钟)
从当前时刻到下一班车到达的剩余时间 ri (分钟)(保证 0≤ri<ti)
小蠢可以在任意整数分钟时刻到达车站(从时刻 0 开始计算),到达后,如果当前时刻恰好有公交车到站,他可以立即上车;否则需要等待到下一班车到达。
请帮助小蠢选择一个到达时刻,使得他的等待时间最少,并输出这个最短等待时间。
输入格式
第一行一个整数 n (1≤n≤105)
接下来 n 行,每行两个整数 ti,ri (1≤ti≤109,0≤ri≤ti)
输出格式
一个整数,表示最短等待时间。
输入输出样例
输入#1
3 5 2 6 4 7 3
输出#1
1
说明/提示
样例解释:
- 线路1:发车间隔5分钟,当前下一班车在2分钟后到达。
- 线路2:发车间隔6分钟,当前下一班车在4分钟后到达。
- 线路3:发车间隔7分钟,当前下一班车在3分钟后到达。
如果小蠢在时刻1到达: - 线路1下一班车在时刻2(等待1分钟)
- 线路2下一班车在时刻4(等待3分钟)
- 线路3下一班车在时刻3(等待2分钟)
他可以坐上线路1的车,等待时间为1分钟。
可以证明没有等待时间更短的方案,因此输出1。
数据范围:
对于 30% 的数据,n≤1000,ti≤1000
对于 100% 的数据,n≤105,ti≤109
提示:
注意:小蠢到达时刻可以是任意非负整数,包括0。
对于每条线路,如果小蠢在时刻 x到达,那么下一班车的到达时刻是:
如果 x≤ri,则到达时刻为 ri;
如果 x>ri,则到达时刻为 ri+k⋅ti,其中 k 是最小的非负整数使得 ri+k⋅ti≥x。
本题核心是贪心思想:实际上不需要枚举所有到达时刻,只需要考虑每个 ri以及 ri−1 等有限个关键时刻即可。