QOJ.ac

QOJ

시간 제한: 1 s 메모리 제한: 256 MB 총점: 100

#23830. 現代大宅

통계

題目描述

你迷路闖入咗一間好大嘅大宅。呢間大宅嘅結構係正方形嘅房間喺東西南北方向排成格仔網狀,東西方向有 $M$ 列,南北方向有 $N$ 行,合共有 $M \times N$ 間房。由西邊數起第 $x$ 列($1 \le x \le M$)、由南邊數起第 $y$ 行($1 \le y \le N$)嘅房間用 $(x, y)$ 表示。

喺東西南北方向相鄰嘅 $2$ 間房之間,都由牆壁正中間嘅一道門連住。每一道門都處於閂埋咗唔行得嘅狀態,或者開咗可以通行嘅狀態其中之一。當道門開咗嗰陣,喺嗰啲房間嘅正中間之間移動需要 $1$ 分鐘。另外,有啲房間嘅正中間有一個掣,持續撳住個掣 $1$ 分鐘,大宅入面所有門嘅開關狀態就會全部調轉。

而家,連住東西方向相鄰嘅 $2$ 間房嘅所有門都係閂埋嘅,連住南北方向相鄰嘅 $2$ 間房嘅所有門都係開咗嘅。你而家喺房間 $(1, 1)$ 嘅正中間,想用最短時間移動去房間 $(M, N)$ 嘅正中間。

任務

俾定大宅嘅大細 $M, N$ 同埋有掣嘅 $K$ 間房嘅位置 $(X_1, Y_1), (X_2, Y_2), \dots, (X_K, Y_K)$,請編寫一個程式,求出由連住東西方向相鄰嘅 $2$ 間房嘅所有門閂埋、連住南北方向相鄰嘅 $2$ 間房嘅所有門開咗嘅狀態開始,由房間 $(1, 1)$ 嘅正中間移動去房間 $(M, N)$ 嘅正中間最少需要幾多分鐘。不過,如果無辦法去到房間 $(M, N)$,請指出呢一點。

限制

  • $2 \le M \le 100000$:大宅喺東西方向嘅房間數量。
  • $2 \le N \le 100000$:大宅喺南北方向嘅房間數量。
  • $1 \le K \le 200000$:有掣嘅房間數量。
  • $1 \le X_i \le M$:有掣嘅房間喺東西方向嘅位置。
  • $1 \le Y_i \le N$:有掣嘅房間喺南北方向嘅位置。

輸入格式

由標準輸入讀入以下數據。

  • 第 $1$ 行包含用空格隔開嘅整數 $M, N, K$。$M$ 表示大宅喺東西方向嘅房間數量,$N$ 表示大宅喺南北方向嘅房間數量,$K$ 表示有掣嘅房間數量。
  • 接住落嚟嘅 $K$ 行之中嘅第 $i$ 行($1 \le i \le K$)包含用空格隔開嘅整數 $X_i, Y_i$。呢個表示喺房間 $(X_i, Y_i)$ 嘅正中間有一個掣。$K$ 組 $(X_1, Y_1), (X_2, Y_2), \dots, (X_K, Y_K)$ 互不相同。

輸出格式

向標準輸出印出 $1$ 行,包含一個表示移動最少需要幾多分鐘嘅整數。不過,如果無辦法去到房間 $(M, N)$,就改為輸出整數 $-1$。

評分標準

  • 佔總分 $20\%$ 嘅評測數據,滿足 $M \le 1000$ 同埋 $N \le 1000$。
  • 佔總分 $30\%$ 嘅評測數據,滿足 $K \le 2000$。
  • 佔總分 $50\%$ 嘅評測數據,最少滿足呢 $2$ 個條件其中之一。另外,唔存在同時滿足呢 $2$ 個條件嘅評測數據。

樣例 1

輸入

3 2 1
1 2

輸出

4

樣例解釋

喺呢個例子入面,透過以下行動可以喺 $4$ 分鐘之內由房間 $(1, 1)$ 嘅正中間移動去房間 $(3, 2)$ 嘅正中間,而且呢個係最短時間:

  • 移動去房間 $(1, 2)$ 嘅正中間。
  • 撳房間 $(1, 2)$ 正中間嘅掣。
  • 移動去房間 $(2, 2)$ 嘅正中間。
  • 移動去房間 $(3, 2)$ 嘅正中間。

呢個時候大宅嘅情況喺下圖表示出嚟。喺圖入面,右邊係東,上邊係北,$\times$ 記號表示你嘅位置,$\bigcirc$ 記號表示個掣。

fig1

樣例 2

輸入

3 2 1
2 1

輸出

-1

樣例解釋

喺呢個例子入面,你無辦法去到房間 $(3, 2)$。

樣例 3

輸入

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

輸出

25

樣例解釋

喺呢個例子入面,最初大宅嘅情況如下圖所示。注意房間 $(1, 1)$ 或者房間 $(M, N)$ 嘅正中間亦有可能有掣。

fig2

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.