Điểm:
1800 (p)
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Cho hai số nguyên \(n\) và \(x\). Hãy đếm số lượng dãy \(a\) độ dài \(n\), mỗi phần tử có giá trị trong khoảng \([1, n]\) và hàm sau có giá trị đúng:
binary_search(a, n, x)
left = 1
right = n
while left <= right
middle = (left + right) / 2
if a[middle] == x then
return true
if a[middle] < x then
left = middle + 1
else
right = middle - 1
return false
Lưu ý rằng các phần tử của dãy được đánh chỉ số từ \(1\) và phép chia được thực hiện ở phần nguyên (làm tròn xuống).
Input
- Một dòng duy nhất chứa hai số nguyên \(n\) và \(x\) (\(1 \leq x \leq n \leq 10 ^ {12}\)).
Output
- Một dòng duy nhất chứa một số nguyên là số lượng dãy \(a\) thỏa mãn sau khi chia lấy dư cho \(10 ^ 9 + 7\).
Scoring
- Subtask 1 (20% số điểm): \(n \leq 7\).
- Subtask 2 (20% số điểm): \(n \leq 10 ^ 3\).
- Subtask 3 (30% số điểm): \(n \leq 10 ^ 6\).
- Subtask 4 (30% số điểm): Không có ràng buộc gì thêm.
Example
Test 1
Input
3 2
Output
15
Note
Các dãy thỏa mãn là: \([1, 1, 2]\), \([1, 2, 1]\), \([1, 2, 2]\), \([1, 2, 3]\), \([2, 1, 2]\), \([2, 2, 1]\), \([2, 2, 2]\), \([2, 2, 3]\), \([2, 3, 1]\), \([2, 3, 2]\), \([2, 3, 3]\), \([3, 1, 2]\), \([3, 2, 1]\), \([3, 2, 2]\) và \([3, 2, 3]\).
Bình luận