LQDOJ CUP 2022 - Round 8 - BOUNCE2D

Xem PDF




Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 2.0s Bộ nhớ: 512M Input: BOUNCE2D.inp Output: BOUNCE2D.out

Chắc hẳn ai cũng đã từng có một thời dùng những chiếc điện thoại Nokia, và càng không thể chưa từng chơi tựa game huyền thoại Bounce trên những chiếc "cục gạch" này. Vì muốn sống lại những ký ức tuổi thơ đó, N đã quyết định chọn Bounce làm tựa game cho đồ án cuối kỳ của mình. Với mục tiêu giành được điểm cao, cậu đã làm cho game Bounce của mình phải xịn xò hơn cả bản gốc. Do đó cậu đã tạo ra game Bounce 2D.

Trong tựa game này, quả bóng của chúng ta sẽ di chuyển trong một trục tọa độ Descartes, quả bóng sẽ xuất phát ở tọa độ \((0,0)\) và có kích thước là \(1\). Ban đầu, bạn có thể cho quả bóng xuất phát theo hướng sang phải hoặc lên trên tùy ý. Khi quả bóng đang ở tọa độ \((x,y)\) và kích thước là \(k\) thì quả bóng có thể di chuyển như sau:

  • Nếu đang hướng sang phải, quả bóng có thể nhảy tới tọa độ \((x+k,y)\).
  • Nếu đang hướng lên trên, quả bóng có thể nhảy tới tọa độ \((x,y+k)\).

Giống như tựa game gốc, Bounce 2D cũng sẽ có những cái bơm và cái đinh. Sẽ có \(n\) tọa độ phân biệt chứa bơm và \(m\) tọa độ phân biệt chứa đinh. Khi quả bóng nhảy vào những tọa độ đặc biệt này thì quả bóng có thể:

  • Thay đổi hướng đi của mình từ sang phải thành lên trên và ngược lại hoặc giữ nguyên hướng đi cũ.
  • Nếu nhảy vào bơm, quả bóng có thể sử dụng bơm để tăng kích thước của mình lên gấp đôi hoặc giữ nguyên kích thước cũ. Sau khi sử dụng thì cái bơm ở tọa độ đó sẽ không thể sử dụng lại lần nữa.
  • Nếu nhảy vào đinh, quả bóng bắt buộc phải giảm kích thước của mình về \(1\).

Bạn sẽ dành chiến thắng nếu đưa quả bóng đi đến chính xác tọa độ \((W,H)\). Hãy cho biết số lần nhảy tối thiểu để có thể dành chiến thắng.

Input

  • Dòng đầu tiên chứa bốn số nguyên \(W\), \(H\), \(n\)\(m\) (\(0 \leq W,H \leq 10^9\), \(0 \leq n,m \leq 5 \cdot 10^4\)) lần lượt là tọa độ của đích, số bơm và số đinh.
  • Trong \(n\) dòng tiếp theo, dòng thứ \(i\) chứa hai số nguyên \(x_i\)\(y_i\) (\(0 \leq x_i \leq W, 0 \leq y_i \leq H\)) là các tọa độ chứa bơm.
  • Trong \(m\) dòng tiếp theo, dòng thứ \(i\) chứa hai số nguyên \(u_i\)\(v_i\) (\(0 \leq u_i \leq W, 0 \leq v_i \leq H\)) là các tọa độ chứa đinh.
  • Dữ liệu đảm bảo không có tọa độ nào có cả bơm và đinh và điểm xuất phát của quả bóng không có bơm hay đinh.

Output

  • Một dòng duy nhất chứa một số nguyên duy nhất là số lần nhảy tối thiểu của quả bóng để dành chiến thắng, nếu không tồn tại cách chiến thắng thì in ra \(-1\).

Scoring

  • Subtask \(1\) (\(15\%\) số điểm): \(W \leq 10, H = 0\), \(n, m \leq 10\).
  • Subtask \(2\) (\(20\%\) số điểm): \(W, H \leq 500\).
  • Subtask \(3\) (\(25\%\) số điểm): \(n, m \leq 500\).
  • Subtask \(4\) (\(20\%\) số điểm): \(H = 0\).
  • Subtask \(5\) (\(20\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
6 5 6 6
0 1
0 3
1 1
3 5
3 3
5 2
1 0
2 3
3 1
5 1
5 5
6 1
Output
7
Note

Hình minh họa:

Trong đó, lộ trình màu tím là lộ trình tốn ít bước nhảy nhất.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: