canuc80k4307·8/10

Dãy Độ Cao Êm

Nộp bài trên LQDOJ

Bài 43 · Open and Close Interval Trick

Cho độ cao đôi một khác nhau. Bạn được sắp xếp chúng theo một hoán vị . Chi phí của hoán vị là

Hãy đếm số hoán vị có chi phí không vượt .

Input

  • Dòng đầu chứa và .
  • Dòng thứ hai chứa số nguyên .

Output

  • In số hoán vị có chi phí không vượt modulo .

Constraints

  • .
  • .
  • và các đôi một khác nhau.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3 2
1 2 3

Output

2

Giải thích: Chỉ hai thứ tự đơn điệu và có tổng chênh lệch bằng . Bốn hoán vị còn lại đều có chi phí lớn hơn .

Lời giải tóm tắt
  • Ý tưởng: Sắp xếp các độ cao tăng dần rồi chèn chúng vào skeleton của hoán vị cuối. Dùng trạng thái (c,cost,e), trong đó c là số thành phần, e∈{0,1,2} là số đầu toàn cục đã được chiếm.
  • Ý tưởng: Khi tăng độ cao thêm gap, có 2c-e đầu hở nên chi phí bắt buộc tăng (2c-e)*gap. Độ cao mới có thể tạo thành phần ở khoảng trong, chiếm một đầu toàn cục, nối vào một đầu hở, hoặc gộp hai thành phần. Các hệ số là số vị trí tương ứng.
  • Ý tưởng: Mọi hoán vị có một quá trình chèn duy nhất; tổng chênh lệch được phân bổ chính xác qua các khoảng độ cao. Trạng thái cuối cần c=1,e=2 và cost≤L. Độ phức tạp O(N^2L), bộ nhớ O(NL).
  • Lỗi cần tránh: Tăng chi phí bằng 2·component·gap mà quên trừ các đầu toàn cục đã được chiếm.
  • Lỗi cần tránh: Giữ đúng mọi trường hợp biên và kiểu số đã nêu trong đề.
  • Lỗi cần tránh: Chỉ lấy modulo ở những bài có yêu cầu modulo; bài 10 và bài 9 phải giữ nguyên số nguyên 64 bit.