#P50119. 「LibreOJ β Round #7」网格图

「LibreOJ β Round #7」网格图

题目描述

给定一张 n×mn \times m 的网格图,行标号为 11nn,列标号为 11mm,网格图上设置了 kk 个障碍。

一个机器人在网格图中行走,初始时它位于位置 ss,每一时刻他有三种行动方式:

  1. 如果自己面向的方向不是障碍或网格的边缘,向该方向前进一格。
  2. 向左(逆时针)转四分之一周。
  3. 向右(顺时针)转四分之一周。

初始时机器人可以选择面向任意一个方向。

现在有 qq 个询问,每个询问给定一个终点 tit_i,请你求出他从 sstit_i 最少需要的转向次数(即行动 2 和 3 的总次数,但初始时选择方向不算做转向),每次选择的初始方向可以不同。

输入格式

第一行四个整数 n,m,k,qn,m,k,q,表示网格的行数和列数,障碍的个数,以及询问的个数。

接下来 kk 行描述障碍,其中第 ii 行两个正整数 xi,yix_i, y_i,表示第 xix_i 行,yiy_i 列有一个障碍,保证障碍的位置两两不同。

接下来一行两个正整数 xs,ysx_s,y_s,表示起点 ss 在第 xsx_s 行,ysy_s 列,保证起点处没有障碍。

接下来 qq 行描述询问,其中第 ii 行两个正整数 xti,yti{x_t}_i,{y_t}_i,表示第 ii 次询问的终点 tt 在第 xti{x_t}_i 行,yti{y_t}_i列,保证终点处没有障碍。

输出格式

输出共 qq 行,每行一个正整数,其中第 ii 的数表示第 ii 个询问的答案。如果第 ii 个询问中从起点 ss 无法到达终点 tit_i,则第 ii 行输出 -1

样例 1

3 4 3 9
1 2
2 1
3 3
3 4
1 1
1 3
1 4
2 2
2 3
2 4
3 1
3 2
3 4
-1
1
0
1
1
0
3
2
0

地图如下(. 表示空地,# 表示障碍,S 表示起点,下同):

.#..
#...
..#S
3 3 0 9
2 2
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
1
0
1
0
0
0
1
0
1

地图如下:

...
.S.
...
5 7 4 6
1 4
1 6
2 5
5 4
1 1
1 5
2 4
2 7
4 1
4 6
5 7
-1
1
2
0
1
2

地图如下:

S..#.#.
....#..
.......
.......
...#...

数据范围与提示

对于所有数据,1n,m109,0k50000,1q105,1xi,xs,xtin,1yi,ys,ytim1 \leq n,m \leq 10^9,0 \leq k \leq 50000,1 \leq q \leq 10^5,1 \leq x_i,x_s,x_{t_i} \leq n,1 \leq y_i,y_s,y_{t_i} \leq m,保证起点和终点处没有障碍,障碍的位置两两不同。

Subtask # 分值 n,mn,m kk qq
11 66 5\le 5 20\le 20
22 88 20\le 20 200\le 200
33 1010 500\le 500 20000\le 20000 105\le 10^5
44 55 2000\le 2000 50000\le 50000
55 77 105\le 10^5 1\le 1
66 77 5\le 5
77 1010 200\le 200
88 66 1000\le 1000
99 2626 20000\le 20000
1010 1515 109\le 10^9 50000\le 50000