#63. Xếp nam châm (Mã bài: PUZZMAG)

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Sau khi đã giải quyết xong bài toán lì xì, Tít lại bày ra một trò chơi mới. Tít có N viên nam châm và muốn xếp chúng vào L vị trí có sẵn.

Các vị trí này được xếp thành một hàng ngang và được đánh số từ 1 đến L . Khoảng cách giữa hai vị trí liên tiếp là 1 đơn vị. Do kích thước của các viên nam châm là không đáng kể, khoảng cách giữa hai viên nam châm đặt tại vị trí i và vị trí j được tính là |i-j| .

Mỗi viên nam châm là một vật thể riêng biệt và có thể phân biệt được với nhau, ngay cả khi chúng có cùng sức hút. Ta đánh số các viên nam châm từ 1 đến N . Viên nam châm thứ i có sức hút là R_i . Điều này có nghĩa là nó sẽ hút bất kỳ viên nam châm nào khác được đặt trong khoảng cách nhỏ hơn R_i đơn vị.

Tít không muốn có bất kỳ hiện tượng hút nhau nào xảy ra. Do đó, cậu muốn tìm cách xếp tất cả N viên nam châm vào L vị trí (mỗi vị trí chứa tối đa một viên nam châm) sao cho không có hai viên nam châm nào hút nhau.

Câu hỏi đặt ra là: có bao nhiêu cách sắp xếp thỏa mãn điều kiện trên? Vì kết quả có thể rất lớn, bạn chỉ cần in ra phần dư của nó khi chia cho 10^9 + 7 .

Dữ liệu:

  • Dòng đầu gồm hai số nguyên dương N L ( 1 \le N \le 50; N \le L \le 10^4 ) – số lượng nam châm và số lượng vị trí.
  • Dòng thứ hai chứa N số nguyên dương R_1, R_2, \dots, R_N ( 1 \le R_i \le L ) – biểu diễn sức hút của N nam châm.

Kết quả: In ra số cách sắp xếp thỏa mãn mong muốn của Tít sau khi chia lấy dư cho 10^9 + 7 .

Ví dụ:

Dữ liệu:

3 4
1 2 1

Kết quả:

4

Dữ liệu:

4 4
1 1 1 1

Kết quả:

24

Giải thích:

  • Testcase 1: Ta có 3 nam châm (được đánh số 1, 2, 3 với sức hút tương ứng là 1, 2, 1) và 4 vị trí. Một ví dụ về cách xếp hợp lệ là: nam châm 1 vào vị trí 1, nam châm 2 vào vị trí 4, và nam châm 3 vào vị trí 2.

    • Khoảng cách giữa nam châm 1 (tại vị trí 1, R_1=1 ) và nam châm 3 (tại vị trí 2, R_3=1 ) là |1-2|=1 . Không hút nhau vì khoảng cách không nhỏ hơn R_1 và không nhỏ hơn R_3 .
    • Tương tự, các cặp khác cũng không hút nhau.

    Tổng cộng có 4 cách sắp xếp [1,3,0,2], [3,1,0,2], [2,0,1,3] và [2,0,3,1] trong đó 0 biểu thị vị trí trống còn các số nguyên dương biểu thị số hiệu của nam châm tại vị trí tương ứng.

  • Testcase 2: Tất cả 4 nam châm đều có sức hút là 1. Khoảng cách nhỏ nhất giữa hai vị trí bất kỳ là 1. Vì điều kiện hút nhau là khoảng_cách < sức_hút (ví dụ: 1 < 1 là sai), điều này không bao giờ xảy ra. Do đó, mọi cách xếp 4 nam châm riêng biệt vào 4 vị trí đều hợp lệ. Số cách xếp là 4! = 24 .

Giới hạn:

  • Subtask 1 (25%): R_1 = R_2 = \dots = R_N .
  • Subtask 2 (25%): 1 \le N \le 10 .
  • Subtask 3 (25%): 1 \le N \le 30 N \le L \le 300 .
  • Subtask 4 (25%): Không giới hạn gì thêm.