Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.5s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C++, Pascal, Python
Vào một ngày đẹp trời, bỗng dưng Thinkies đi lạc vào một mê cung. Mê cung được biểu diễn dưới dạng một ma trận ~n*m.~ Ô hàng ~i~, cột ~j~ của mê cung được gọi là ô ~(i,j)~. Mê cung này rất đặc biệt, có ~p~ ô lối vào và ~q~ ô lối ra. Thinkies có thể xuất phát từ một ô bất kì trong ~p~ ô lối vào đó, và có thể thoát ra bằng cách đi tới một ô bất kì trong ~q~ ô lối ra. Mỗi ô đều chứa những giá trị riêng, ô ~(i,j)~ có giá trị ~a(i,j)~. Từ một ô ~(i,j)~ bất kì, Thinkies có thể di chuyển theo 2 cách (đều mất một đơn vị thời gian):
- Di chuyển sang ô kề cạnh với nó (từ ô ~(i,j)~ có thể tới ô ~(u,v)~ nếu ~(u,v)~ kề cạnh với ~(i,j)~ và ~a(u,v) \neq 0~).
- Sử dụng phép teleport, di chuyển sang ô ~(u,v)~ nếu ~u*v = a(i,j)~ và ~a(u,v) \neq 0~. Tuy nhiên, Thinkies chỉ có thể sử dụng được ~k~ lần phép teleport này mà thôi. Lưu ý, nếu trên các ô lối vào hoặc lối ra có giá trị a(u,v) = 0 thì ta sẽ không thể nào xuất phát hoặc đi vào ô đó. Hãy tìm cách đưa Thinkies ra khỏi mê cung sớm nhất có thể!
Input
- Dòng đầu gồm 3 số ~n,m,k (1 \le n, m \le 1000, k \le 3)~
- ~n~ dòng sau, mỗi dòng gồm m số ~a(i,j)~ biểu hiện mê cung
- Dòng tiếp theo gồm 2 số tự nhiên ~p,q (p+q \le n*m)~.
- ~p~ dòng tiếp theo mỗi dòng gồm một cặp số ~(i,j)~ thể hiện các ô là lối vào.
- ~q~ dòng tiếp theo mỗi dòng gồm một cặp số ~(i,j)~ thể hiện các ô là lối ra.
Output:
Số đơn vị thời gian ít nhất để Thinkies có thể ra khỏi mê cung, nếu không thể thoát ra in ra số ~-1~.
Sample Test 1
Input:
3 3 1
6 1 1
1 1 1
1 1 1
1 1
1 1
3 3
Output:
2
Sample Test 2
Input:
2 2 3
0 1
2 1
1 1
1 1
2 1
Output:
-1
Sample Test 3
Input:
2 2 3
2 1
0 1
1 1
1 1
2 1
Output
-1
Giải thích
- Ở test 2, do ô ~(1,1)~ có ~a(1,1) = 0~ nên ta không thể xuất phát từ ô đó, nên sẽ không thể đi ra.
- Ở test 3, do ô ~(2,1)~ có ~a(2,1) = 0~ nên ta không thể đi vào ô đó, nên không thể thoát ra mê cung.
Ràng buộc
~a(i, j) \le 6 * 10 ^ 6~
- Subtask 1: ~n \le 50, m \le 50, k = 0~. (20%)
- Subtask 2: ~n \le 1000, m \le 1000, k = 0~. (30%)
- Subtask 3: ~n \le 50, m \le 50.~ (20%)
- Subtask 4: ~n,m \le 1000, k \le 3.~ (30%)