#MO0004. 走迷宫

走迷宫

走迷宫

题目描述

一个二维网格型迷宫,大小视为无限大,其中有一些障碍格点。

你初始位于 (sx,sy) (sx, sy) ,可以向上下左右四个方向开始移动。每次移动会沿一个方向不断前进直到遇到障碍(在走到障碍前停止),之后可以向左或向右转90度继续移动。若所要移动的方向上没有障碍或出口,则此次移动非法(视为走到无穷远处)。

每次往一个方向移动的代价为 1。当某次移动过程中经过出口,此次游戏胜利。

对于给定的迷宫,有 k k 个障碍,起始坐标 (sx,sy) (sx, sy) ,现在有 q q 次独立的询问,每次询问从起点到达某个出口的最小移动代价;若无解输出 -1。

输入格式

  • 第一行四个正整数 k,q,sx,sy k, q, sx, sy
  • 接下来 k k 行,每行两个整数 xi,yi x_i, y_i 代表一个障碍(不保证互不相同)
  • 接下来 q q 行,每行两个整数 exi,eyi ex_i, ey_i 代表一个出口坐标

输出格式

  • 输出 q q 行,每行一个整数代表最小移动代价,若无法到达则输出 -1

样例

样例1输入

7 3 6 4 5 1 4 3 1 4 4 5 3 6 6 7 2 8 1 2 2 2 4 8

样例1输出

5 2 3

样例解释:黑色为障碍,蓝色为起点,红圈为出口

数据范围

子任务 分数 条件
子任务1 20分 k,q10 k, q \leq 10 ,坐标范围 [100,100] [-100, 100]
子任务2 k,q100 k, q \leq 100 ,坐标范围 [1000,1000] [-1000, 1000]
子任务3 30分 k,q1000 k, q \leq 1000 ,坐标范围 [106,106] [-10^6, 10^6]
子任务4 k,q105 k, q \leq 10^5 ,坐标范围 [109,109] [-10^9, 10^9]

对于 100% 的数据,k,q105 k, q \leq 10^5 ,坐标范围 [109,109] [-10^9, 10^9]