#P8224. [WFOI - 02] I wanna cross the grid(穿越网格)
[WFOI - 02] I wanna cross the grid(穿越网格)
题目背景
相信奇迹的人,本身比奇迹更伟大吧
突然,存档点落到了一个巨大的网格中,只有走过所有必经区域,才能出现下一个存档点...
题目描述
给定一张 行 列的网格图,行和列从 开始编号,定义二元组 表示第 行第 列的格子,每一行的第 到第 列的格子是必经区域,形式化地,设 是必经区域集合,则 。
每次 kid 可以向上下左右四个方向走一步,且不能超过边界。形式化地,若现在 kid 现在在 ,则 kid 可以走到 。
初始时 kid 在 (保证 ),他需要走过所有的必经区域,且任何一个格子最多只经过一次。形式化地,kid 走的路径形如一个二元组序列 ,需要满足 $\forall (x_0,y_0)\in D,\exist i\in[1,k],(x_0,y_0)=(x_i,y_i)$,且 。
同时,kid 还要记录一个通关序列 ,当 kid 第一次进入某一行的必经区域之后,就要把行号写在当前序列的后面,且立刻经过本行所有的必经区域。同时, 必须包含一个长度为 的子序列 才是一个合法的通关序列,从而真正通关。形式化地, 合法当且仅当存在长度为 的序列 满足 ,且 单调上升。
同时,为了给 lindongli2004 降低操作难度,lindongli2004 希望 kid 走的步数越少越好。
给定 ,请你为 kid 规划一条通关路线,或者告诉他不存在一条路线。剩下的操作就交给 lindongli2004 吧!
输入格式
第一行 个正整数 ,分别表示矩阵的行数和列数,必经区域的左边界和右边界,起点的 坐标和 坐标,序列 的长度和评分参数。
第二行 个不重复的正整数,表示序列 。
输出格式
第一行一个字符串 YES
或者 NO
表示是否存在一条路径(不包含引号)。
若存在一条路径,第二行一个正整数 表示路径长度,接下来 行每行两个正整数 表示路径的坐标。
5 4 2 3 2 2 2 15
3 1
YES
15
2 2
2 3
3 3
3 2
4 2
4 3
5 3
5 2
5 1
4 1
3 1
2 1
1 1
1 2
1 3
提示
数据范围:
,,其他详见下发文件。
评分规则:
下发文件中第一行的最后一个数为 ,设你的操作步数为 。那么
- 若 ,你将获得 分。
- 若 且能通关,你将获得 分。
- 若你不能通关,你将获得 分。
checker:
使用方法:在同一目录下,把下发的数据放到 data.in 中,把你的答案放到 data.out 中,编译运行即可。
注意事项:
- 此 checker 默认存在一组方案,并 check 该方案是否合法。
- 此 checker 的最大方案容量为 ,也就是说,你的方案中不能有超过 个数。