#P9065. [yLOI2023] 云梦谣
[yLOI2023] 云梦谣
题目背景
归来且做云梦梦一场 大梦好
栽花闻酒香 醒醒醉醉笑笑
天地偌大复路远山高 最难得偷半日逍遥
偶尔糊涂不问世事不知晓
——银临 & 慕寒《云梦谣》
题目描述
“喂,枸杞,你这只笨狗,又偷吃!看我不收拾你!”
朵一气呼呼地从院子里跑出来,手中握着掸子,而枸杞早已不见踪影。
云梦庭可以看作一个 行 列的方格阵,第 行第 列的格子被记作 。每个格子 要么有一个高度 ( 为正整数),要么是障碍物,不能通过。(方便起见,约定障碍物的 用 表示。)另外,云梦庭上有 个指定的格子上可以进行御剑飞行。开始时,朵一和枸杞分别位于方格 和 。
朵一的御剑飞行还不是很熟练,现在她还控制不好御剑的高度。因此在任意时刻,朵一在方格 上可以做如下行动之一:
- 移动到与该方格相邻的方格 、、、 之一上(不能移动出方格边界,也不能移动到障碍物上);
- 如果方格 上允许御剑飞行,则朵一可以御剑飞行至另一个同样允许御剑飞行且与方格 高度相等的方格上;
- 使用仙法将当前格子的高度 改变为任一正整数。
进行上述每项行动均需花费 个单位时间。
“哼,笨狗子你再跑!”说罢,朵一便追了出去。朵一接下来还要尽快继续今天的修行,因此她想知道到达 格子所需的最短时间是多少。
输入格式
输入的第一行有三个整数,依次表示方格阵的行数 、列数 和能御剑飞行的方格个数 。
接下来 行,每行 个整数,其中第 行的第 个数表示方格 的高度 。数据保证 和 不为 。
接下来 行,每行两个整数 和 ,表示一个允许御剑飞行的方格的坐标 。数据保证这 个方格的坐标互不相同。
输出格式
一行一个整数,表示朵一到达 所需的最小时间。如果朵一无法到达,输出 -1
。
4 4 2
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 1
3 4
3
4 4 3
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 1
2 4
4 1
4
2 5 0
1 0 3 3 4
2 3 4 0 5
7
4 4 3
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
1 1
2 1
3 3
3
提示
样例 1 解释
第 个单位时间,朵一将当前方格 的高度修改为 ;
第 个单位时间,朵一从方格 御剑飞行至 ;
第 个单位时间,朵一从方格 移动到 ,追上了枸杞。
样例 2 解释
第 个单位时间,朵一从方格 御剑飞行至 ;
第 个单位时间,朵一从方格 移动到 ;
第 个单位时间,朵一从方格 移动到 ;
第 个单位时间,朵一从方格 移动到 ,追上了枸杞。
数据规模与约定
对全部的测试点,保证 ,。
提示
请注意大量数据读入对程序效率造成的影响,选择合适的读入方式,避免超时。
说明
本题共有 5 个附加样例文件,见附件里的 dream.zip。
后记
不过,别看朵一现在一副生气的样子,可当她追上枸杞后,大抵是不舍得真的动手吧。“嘿嘿,今日的修行结束后,该吃什么好呢?”在这飞瀑悬挂、翠竹怀抱的云梦庭中,修仙炼体,不羡尘嚣,应是这世上最逍遥的事了。