Bounce

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: 2200 Thời gian: 1.5s Bộ nhớ: 1G Input: bàn phím Output: màn hình

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" ấy. Vì muốn sống lại những ký ức tuổi thơ ấy, ldn694 đã tự tạo ra một game Bounce của riêng mình. Vì thời gian và kinh phí có hạn, trò chơi chỉ có duy nhất một đường đi nằm ngang như trục Ox. Quả bóng của chúng ta sẽ xuất phát ở tọa độ \(0\) và sẽ chỉ có thể nhảy về phía trước. Ban đầu, quả bóng có thể nhảy được một bước độ dài \(1\). Trên đường đi sẽ có các máy bơmđinh. Khi quả bóng nhảy tới tọa độ có máy bơm, bạn được quyền lựa chọn giữ nguyên độ dài bước nhảy hoặc tăng độ dài bước nhảy lên gấp đôi (chỉ được tăng \(1\) lần tại \(1\) tọa độ). Còn khi quả bóng nhảy tới tọa độ có đinh, độ dài bước nhảy của quả bóng sẽ bắt buộc quay về \(1\). Hãy tính số lần nhảy ít nhất để quả bóng nhảy tới đúng tọa độ \(N\) nhé!

Input

  • Dòng đầu tiên gồm 3 số nguyên dương là \(N, M, K\) lần lượt là tọa độ đích đến, số máy bơm và số đinh.
  • Dòng tiếp theo gồm \(M\) số nguyên dương tăng dần, là tọa độ của các máy bơm.
  • Dòng tiếp theo gồm \(K\) số nguyên dương tăng dần, là tọa độ của các đinh.
  • Dữ liệu đảm bảo tọa độ các máy bơmđinh là phân biệt và bé hơn \(N\).

Output

  • Gồm 1 số nguyên duy nhất là số bước nhảy ít nhất để quả bóng nhảy tới đúng tọa độ \(N\), nếu không tồn tại cách nhảy nào thì in số \(-1\).

Scoring

  • Subtask 1 (20%): \(N,M,K \leq 20\)
  • Subtask 2 (25%): \(N \leq 10^9, M,K \leq 10^3\)
  • Subtask 3 (25%): \(N,M,K \leq 10^5\)
  • Subtask 5 (30%): \(N \leq 10^9, M,K \leq 10^5\)

Example

Test 1

Input
7 2 1
1 3 
5
Output
3
Note

Bước đầu tiên ta sẽ nhảy từ \(0\) tới \(1\), sau đó tăng độ dài bước nhảy lên \(2\) và nhảy tới \(3\), sau đó tăng độ dài bước nhảy lên \(4\) và nhảy tới \(7\).

Test 2

Input
8 2 1
1 3
5
Output
6
Note

Bước đầu tiên ta sẽ nhảy từ \(0\) tới \(1\), sau đó tăng độ dài bước nhảy lên \(2\) và nhảy tới \(3\), sau đó giữ nguyên độ dài bước nhảy và nhảy tới \(5\) và giảm độ dài bước nhảy về \(1\). Cuối cùng nhảy thêm \(3\) bước độ dài \(1\) nữa để tới \(8\).

Bình luận

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

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