canuc80k4303·4/10

Đường Đi Zích Zắc

Nộp bài trên LQDOJ

Bài 43 · Open and Close Interval Trick

Có ô nằm trên một hàng, đánh số . Một hành trình là một thứ tự ghé thăm mọi ô đúng một lần, bắt đầu ở và kết thúc ở .

Kể từ bước nhảy thứ hai, hướng phải luân phiên. Với ba ô liên tiếp u,v,w trên hành trình, nếu thì phải có ; nếu thì phải có . Bước đầu tiên có thể đi theo bất kỳ hướng nào. Hãy đếm số hành trình như vậy.

Input

  • Một dòng chứa và .

Output

  • In số hành trình zích zắc hợp lệ modulo .

Constraints

  • .
  • và .
  • Dữ liệu bảo đảm tồn tại ít nhất một hành trình hợp lệ.

Scoring

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

Example

Test 1

Input

3 1 2

Output

1

Giải thích: Thứ tự duy nhất là : bước đầu sang phải và bước sau sang trái. Mọi ô được ghé đúng một lần, nên đáp án bằng .

Lời giải tóm tắt
  • Ý tưởng: Xét các giá trị 1,2,...,N theo thứ tự tăng. Trong một hành trình zích zắc hoàn chỉnh, các giá trị đã chèn tạo thành các đoạn rời của đường đi. DP lưu số đoạn đang có.
  • Ý tưởng: Giá trị s hoặc e là đầu mút toàn cục nên chỉ có thể tạo một đoạn mới hoặc nối vào một đoạn. Giá trị thường có thể nối hai đoạn, hoặc tạo một đoạn mới trong một khoảng hợp lệ. Khi s/e đã được chèn, khoảng chứa đầu mút ấy không còn là vị trí hợp lệ để tạo đoạn mới, nên số lựa chọn phải trừ tương ứng.
  • Ý tưởng: Việc xóa các giá trị lớn hơn khỏi một hành trình hợp lệ tạo đúng chuỗi trạng thái nói trên; ngược lại các chuyển duy trì bậc và tính luân phiên. Đáp án là trạng thái một đoạn. Thời gian O(N^2), bộ nhớ O(N).
  • Lỗi cần tránh: Không trừ các khoảng đã bị đầu mút s hoặc e chiếm khi tạo thành phần mới.
  • 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.