Number Steps

Xem dạng PDF

Gửi bài giải

Điểm: 5,00
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C++

Cho 1 mảng arr các số nguyên dương không trùng nhau

Từ số nguyên n ban đầu, với mỗi số x trong mảng arr bạn có thể thay đổi số n thành n+x hoặc n*x. Bài toán đặt ra là, bạn cần thực hiện ít nhất bao nhiêu phép biển đổi để có được số m.

Ví dụ:

  • Với n=1, arr=[1,2,3] và m=3 thì kết quả numberSteps(n,arr,m)=1
    Bạn có thể có được số 3 từ số 1 sau 1 phép biến đổi theo 2 cách sau:
    • Từ số 1, bạn sử dụng x=2 để biến đổi 1 thành 3 thông qua phép +: 1+2=3
    • Từ số 1, bạn sử dụng x=3 để biến đổi 1 thành 3 thông qua phép *: 1+2=3
  • Với n=0, arr=[1] và m=2 thì kết quả numberSteps(n,arr,m)=2
    Bạn thu được số 2 từ số 0 sau 2 phép biến đổi sử dụng phép toán +:
    • Đầu tiên, từ số 0, bạn sử dụng x=1 để biến đổi 0 thành 1 thông qua phép +: 0+1=1
    • Tiếp theo, từ số 1, bạn sử dụng x=1 để biến đổi 1 thành 2 thông qua phép +: 1+1=2
  • Với n=3, arr=[2,3] và m=4 thì kết quả numberSteps(n,arr,m)=-1
    Ko có cách nào biến đổi từ 3 thành 4

Đầu vào/đầu ra:

  • [Đầu vào] integer n
    số nguyên ban đầu
    1 <= n <= 10^5
  • [Đầu vào] array.integer arr
    mảng chứa các số nguyên không trùng nhau dùng để biến đổi số ban đầu
    0 <= arr.length() <= 100
    0 <= arr[i] <= 10^5
  • [Đầu vào] integer m
    Số nguyên mong muốn nhận được sau biến đổi
    0 <= m <= 10^5
  • [Đầu ra] integer 
    Số bước biến đổi để đạt được số m theo yêu cầu. Nếu ko thể biến đổi được, hãy trả ra đáp án -1

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.