Tập số

Đề bài

Mô tả

Trên tập số {1,2,...,n}, Alice tiến hành xóa đi k (k<n) số a1,a2,...,ak để 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 d 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.

Cho n,k,d và dãy a1,a2,...,ak, 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.

Dữ liệu vào

  • Dòng đầu chứa ba số nguyên dương n,k,d (k<n107; k105; dn);
  • Dòng thứ hai chứa k số nguyên dương phân biệt a1,a2,...,ak (ain, 1ik);

Dữ liệu ra

Hai dòng, 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 (109+7).

Ràng buộc

  • k<n107
  • k105
  • dn
  • Subtask 1 (20 điểm): nk20
  • Subtask 2 (25 điểm): nk200
  • Subtask 3 (25 điểm): nk2×105
  • Subtask 4 (30 điểm): Không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
8 3 1
2 3 8
3
3
S={1,4,5,6,7}. Chọn tối đa 3 số có hiệu đôi một >1. Có 3 cách: {1,4,6}, {1,4,7}, {1,5,7}.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0