HDOJ 6786. Intersection
2020 年百度之星·程序设计大赛 - 初赛三
问题描述:
Mr. Left 来到了一个路口,这个路口只能右转,并且都是两车道。
现在在南北向车道上有 n 辆车,他们都在线 x 南边,这些车想要通过这个路口,到东边去,具体地说,他们要开到线 y 东边。
一辆车一个时刻可以从东南西北中选一个方向移动一个位置,或者呆在原地不动。 同一时刻同一位置不能有超过一辆车。车不能开到路外面。
在任意时刻,所有车都同时移动。两辆相邻的车不能都移动到对方的格子上。在此基础上,只要所有车移动后不存在两辆车处于同一位置,移动就合法。
问最少要多少时间,这些车才可以都开到东边?
输入:
第一行一个整数 test (1≤test≤10)。
对于每组数据,第一行一个整数 n (1≤n≤100000),表示车辆数目。
接下来 n 行,每行两个整数 x,y 表示车的位置,其中 x 表示车道 id( x=1 表示右车道,x=2 表示左车道),y (1≤y≤100000) 表示车在路口前第几个位置。
数据保证没有两辆车初始在同一位置。
输出:
对于每组数据,一行一个整数表示答案。
样本输入:
2
2
1 1
2 1
2
1 2
2 1
样本输出:
3
4
样例解释:
第一组
time 0
….
….
CC
..
time 1
….
CC..
..
..
time 2
….
.CC.
..
..
time 3
….
..CC
..
..
第二组
time 0
….
….
C.
.C
time 1
….
C…
.C
..
time 2
C…
.C..
..
..
time 3
.C..
..C.
..
..
time 4
..C.
…C
..
..
方法:贪心
思路:只需计算最后一辆车通过的时间即可,根据寻找规律,如果最后一辆车(根据从右到左,从上到下的顺序排)在左车道则全部车通过需要y + 2时间,如果最后一辆车在右车道则全部车通过需要y + 2或者y + 1时间。
当最后一辆车在右车道,倒数第二辆车在其左前方时,由于需要等待或者绕远道,所以此时全部车通过需要y + 2时间,否则只需y + 1时间。
运行数据:执行用时:2823MS,内存消耗:13820K
1 | import java.util.Scanner; |
学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。
才疏学浅,若有错误或不当之处,可批评指正,还请见谅!