LQDOJ CUP 2022 - Round 5 - BITSTR

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: 2300 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: BITSTR.inp Output: BITSTR.out

Ban đầu, An có một dãy nhị phân \(S\) độ dài \(n\) gồm toàn các số \(0\). An được thực hiện hai thao tác:

  1. Gán giá trị \(0\) cho một đoạn liên tiếp có độ dài đúng bằng \(u\). Cụ thể hơn, bạn được chọn một giá trị \(i\) sao cho \(1 \leq i \leq n-u+1\) và gán \(S_k=0\) với \(i \leq k \leq i+u-1\).
  2. Gán giá trị \(1\) cho một đoạn liên tiếp có độ dài đúng bằng \(v\). Cụ thể hơn, bạn được chọn một giá trị \(i\) sao cho \(1 \leq i \leq n-v+1\) và gán \(S_k=1\) với \(i \leq k \leq i+v-1\).

Nếu được thực hiện hai thao tác trên số lần tùy ý, An sẽ tạo ra được tổng cộng bao nhiêu dãy nhị phân khác nhau?

Input

  • Dòng đầu tiên chứa số nguyên \(T\) (\(1 \leq T \leq 20\)) là số lượng test.
  • Trong \(T\) dòng tiếp theo, mỗi dòng chứa ba số nguyên \(n\), \(u\) và \(v\) (\(1 \leq n \leq 2000\), \(1 \leq u, v \leq n\)).

Output

  • Gồm \(T\) dòng, dòng thứ \(i\) in ra phần dư trong phép chia đáp án của test thứ \(i\) cho \(10 ^ 9 + 7\).

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): \(n \leq 20\).
  • Subtask \(2\) (\(20\%\) số điểm): \(u = n\).
  • Subtask \(3\) (\(20\%\) số điểm): \(n \leq 40\).
  • Subtask \(4\) (\(20\%\) số điểm): \(n \leq 200\).
  • Subtask \(5\) (\(20\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
5
1 1 1
2 1 2
2 2 1
2 2 2
9 6 4
Output
2
4
4
2
117
Note
  • Trong test thứ nhất, An có thể tạo ra được các dãy nhị phân 0 và 1.
  • Trong test thứ hai và ba, An có thể tạo ra được các dãy nhị phân 00, 01, 10 và 11.
  • Trong test thứ tư, An có thể tạo ra được các dãy nhị phân 00 và 11.

Bình luận

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

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

Kỳ thi: