#P8224. [WFOI - 02] I wanna cross the grid(穿越网格)

    ID: 7300 远端评测题 1000ms 128MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>洛谷原创提交答案Special JudgeO2优化模拟退火随机调整其它技巧构造洛谷月赛

[WFOI - 02] I wanna cross the grid(穿越网格)

题目背景

相信奇迹的人,本身比奇迹更伟大吧

突然,存档点落到了一个巨大的网格中,只有走过所有必经区域,才能出现下一个存档点...

题目描述

给定一张 nnmm 列的网格图,行和列从 11 开始编号,定义二元组 (x,y)(x,y) 表示第 xx 行第 yy 列的格子,每一行的第 LL 到第 RR 列的格子是必经区域,形式化地,设 DD 是必经区域集合,则 D={(x,y)1xn,LyR,x,yN+}D=\{(x,y)|1\leq x\leq n,L\leq y\leq R,x,y\in N_+\}

每次 kid 可以向上下左右四个方向走一步,且不能超过边界。形式化地,若现在 kid 现在在 (x,y)(x,y),则 kid 可以走到 (x+1,y),(x,y+1),(x1,y),(x,y1)(x+1,y),(x,y+1),(x-1,y),(x,y-1)

初始时 kid 在 (Sx,Sy)(S_x,S_y)(保证 Sy=LS_y=L),他需要走过所有的必经区域,且任何一个格子最多只经过一次。形式化地,kid 走的路径形如一个二元组序列 P=(x1,y1),(x2,y2)...(xk,yk)P=(x_1,y_1),(x_2,y_2)...(x_k,y_k),需要满足 $\forall (x_0,y_0)\in D,\exist i\in[1,k],(x_0,y_0)=(x_i,y_i)$,且 ij(xi,yi)(xj,yj)\forall i\not= j,(x_i,y_i)\not= (x_j,y_j)

同时,kid 还要记录一个通关序列 pp,当 kid 第一次进入某一行的必经区域之后,就要把行号写在当前序列的后面,且立刻经过本行所有的必经区域。同时,pp 必须包含一个长度为 LqL_q 的子序列 qq 才是一个合法的通关序列,从而真正通关。形式化地,pp 合法当且仅当存在长度为 LqL_q 的序列 cc 满足 pci=qip_{c_i}=q_i,且 cc 单调上升。

同时,为了给 lindongli2004 降低操作难度,lindongli2004 希望 kid 走的步数越少越好。

给定 n,m,L,R,Sx,Sy,qn,m,L,R,S_x,S_y,q,请你为 kid 规划一条通关路线,或者告诉他不存在一条路线。剩下的操作就交给 lindongli2004 吧!

输入格式

第一行 88 个正整数 n,m,L,R,Sx,Sy,Lq,sn,m,L,R,S_x,S_y,L_q,s,分别表示矩阵的行数和列数,必经区域的左边界和右边界,起点的 xx 坐标和 yy 坐标,序列 qq 的长度和评分参数。

第二行 LqL_q 个不重复的正整数,表示序列 qq

输出格式

第一行一个字符串 YES 或者 NO 表示是否存在一条路径(不包含引号)。

若存在一条路径,第二行一个正整数 cntcnt 表示路径长度,接下来 cntcnt 行每行两个正整数 x,yx,y 表示路径的坐标。

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

提示

数据范围:

1LRm1\leq L\leq R\leq m1Sxn1\leq S_x\leq n,其他详见下发文件。

评分规则:

下发文件中第一行的最后一个数为 ss,设你的操作步数为 cntcnt。那么

  • cntscnt\leq s,你将获得 1010 分。
  • cnt>scnt> s 且能通关,你将获得 9cntsn29- \frac{cnt-s}{\lfloor\frac{n}{2}\rfloor} 分。
  • 若你不能通关,你将获得 00 分。

checker:

自取

使用方法:在同一目录下,把下发的数据放到 data.in 中,把你的答案放到 data.out 中,编译运行即可。

注意事项:

  • 此 checker 默认存在一组方案,并 check 该方案是否合法。
  • 此 checker 的最大方案容量为 2.5×1082.5 \times 10^{8} ,也就是说,你的方案中不能有超过 2.5×1082.5 \times 10^{8} 个数。