题目大意
有一个2∗m的网格,一个机器人在(1,1)的位置,现在想要走遍所有的格子,且每个格子最多只能经过一次。
对于每个格子(i,j)存在ai,j,表示至少经过ai,j秒后才能进入这个格子。
每一秒内,机器人有两种动作;
求出走遍每一个格子的最小时间。
数据规模
有t组数据: 1≤t≤104
2≤m≤2∗105
0≤ai,j≤109
Σm≤2∗105
我的思路
由题意易得有三种遍历方法
-
- 顺时针走, 如;
1 -> 2 -> 3 -> 4
|
8 <- 7 <- 6 <- 5
-
- 逆时针走,如:
1 <- 8 <- 7 <- 6
| |
2 -> 3 -> 4 -> 5
-
- 绕着走,如:
1 4 -> 5 8
| | | |
2 -> 3 6 -> 7
假设所有a均为零,可以得出每种方法走到每个格子对应的时间s1i,j,s2i,j,s3i,j,
接着,对于每种方法,遍历每个格子,对于任意(i,j),求出其中ai,j−si,j的最大值,即等待时间的最大值,若ai,j≤si,j,则按0算
求出三种方法对应的最大等待时间后,则可以假设开始时等待到某一时刻后,直接畅通无阻地走完格子。所以,对于每种方法,花费的时间为2∗n−1+max(si,j)
时间复杂度为Θ(n)
代码链接https://codeforces.cc/contest/1716/submission/166993972(点击直达)
不知出于何种原因,WA2的1920样例,目前错误原因未知,求助