U94308.Temporal Labyrinth
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
HQ被困在一个四维时空迷宫(Four-dimensional Temporal Labyrinth)中。迷宫是一个 N×N 的二维网格,每个格子 ( i , j ) 有一个时间戳 t[i][j],表示进入该格子的最小允许时间(单位:秒)。HQ从起点 (0,0) 出发,目标是到达终点 (N−1,N−1)
HQ每秒可以向上下左右四个方向移动一格(不能斜走)。但迷宫中存在时空裂隙(Temporal Rifts)——这些是特殊的格子,当HQ进入时,会触发一个时间跳跃:
每个时空裂隙格子有一个跳跃参数 k(整数,可正可负)
当HQ进入一个裂隙格子时,当前时间会立即增加 k(即 current_time += k),然后HQ才被“传送”到该格子
时间跳跃可能让HQ回到过去(k<0),也可能让HQ跳到未来(k>0)
注意:即使HQ跳回过去,HQ仍然必须满足每个格子的最小时间戳约束。也就是说,进入格子 ( i , j ) 时,当前时间必须 ≥t[i][j],否则HQ不能进入
此外,迷宫中还有时间锁(Time Locks):
某些格子(非起点终点)是时间锁格子,HQ只能在特定时间点进入
每个时间锁格子 ( i , j ) 有一个唯一允许时间 lock_time[i][j]。
如果HQ到达该格子时,当前时间 = lock_time[i][j],HQ不能进入,必须等待(但等待不消耗时间,HQ只能在时间匹配时才可进入)
HQ不能在格子上停留,必须在每一秒移动一次
求从 (0, 0) 到 (N-1, N-1) 的最短时间(即从出发到抵达终点所经历的总秒数),如果无法到达,输出 -1。
输入格式
第一行一个数 T,表示每个平行宇宙里HQ被困的迷宫数
接下来共 T 个测试数据,每个数据的格式如下:
第一行:N
接下来 N 行,每行 N 个整数,表示 t[i][j](最小时间戳)
再接下来 N 行,每行 N 个整数,表示 rift[i][j](裂隙跳跃值,若非裂隙则为 0)
再接下来 N 行,每行 N 个整数,表示 lock[i][j](时间锁时间,若非锁则为 -1)
输出格式
每个平行宇宙中HQ到达终点(N-1,N-1)的所需时间,若无法到达输出-1
输入输出样例
输入#1
1 3 0 1 2 1 2 3 2 3 4 0 5 -3 0 0 0 0 0 0 -1 -1 -1 -1 5 -1 -1 -1 -1
输出#1
4
说明/提示
1≤T≤10,2≤N≤8,0≤t[i][j]≤100,−20≤rift[i][j]≤20,−1≤lock[i[j]≤150,若为 -1 表示非锁
起点 (0,0) 和终点 (N-1,N-1) 不会是时间锁,但可以是裂隙
初始时间为 0,在第 0 秒位于 (0,0)
HQ必须在每一秒移动,不能原地等待(但时间跳跃会改变时间,从而可能让HQ“等待”到匹配的锁时间)
输入解题思路,AI测评打分。不知道怎么写?