Tập số (DHBB năm 2024)

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: 1800 (p) Thời gian: 1.0s Bộ nhớ: 1023M Input: bàn phím Output: màn hình

Trên tập số \(\{1, 2, \ldots, n\}\), Alice tiến hành xóa đi số \(k\) \((k \leq n)\) số \(a_{1}, a_{2}, \ldots, a_{k}\) để nhận được tập \(S\). Một cách chọn các số trên tập \(S\) được gọi là cách chọn tối ưu bậc nếu:

  • Hiệu hai số bất kì được chọn có giá trị tuyệt đối lớn hơn \(d\);
  • Số lượng số được chọn là lớn nhất.
    Ví dụ, trên tập số \(\{1, 2, 3, 4, 5, 6, 7, 8\}\), xóa đi ba số \(2, 3, 8\) được tập \(S = \{1, 4, 5, 6, 7\}\), ba tập \(\{1, 4, 6\}, \{1, 4, 7\}\)\(\{1, 5, 7\}\) đều là cách chọn tối ưu bậc \(1\).

Yêu cầu: Cho \(n, k, d\) và dãy \(a_{1}, a_{2}, \ldots, a_{k}\), hãy giúp Alice tính số lượng số chọn được trong cách chọn tối ưu bậc \(d\) và số cách chọn tối ưu. Chú ý, hai cách chọn được gọi là khác nhau nếu tồn tại một số của \(S\) thuộc trong cách chọn này nhưng không thuộc trong cách chọn kia.

Input

  • Dòng đầu chứa ba số nguyên dương \(n, k, d\) \((k < n \leq 10^{7}, k \leq 10^{5}, d \leq n)\).
  • Dòng thứ hai chứa \(k\) số nguyên dương phân biệt \(a_{1}, a_{2}, \ldots, a_{k}\) \((a_{i} \leq n, 1 \leq i \leq k)\).

Output

  • Dòng thứ nhất là số lượng số chọn được trong cách chọn tối ưu.
  • Dòng thứ hai là số cách chọn tối ưu chia dư cho \((10^{9} + 7)\).

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): \(n - k \leq 20\).
  • Subtask \(2\) (\(25\%\) số điểm): \(n - k \leq 200\).
  • Subtask \(3\) (\(25\%\) số điểm): \(n - k \leq 2 \times 10^{5}\).
  • Subtask \(4\) (\(30\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
8 3 1
2 3 8
Output
3
3

Bình luận

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

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