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