JOI 2010 - Stairs

Xem PDF



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, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1400 (p) Thời gian: 1.5s Bộ nhớ: 64M Input: bàn phím Output: màn hình

Bạn muốn tìm hiểu có bao nhiêu cách đi lên một cầu thang. Cầu thang gồm \(N\) bậc; độ chênh cao của bậc thứ \(k\)\(h_k\) mm, với \(1 \le k \le N\).

Trong một lần bước, bạn có thể đi lên một hoặc nhiều bậc có tổng độ chênh cao không vượt quá \(P\) mm. Khi đi lên cầu thang, bạn không giậm chân tại chỗ trên cùng một bậc và không đi xuống. Hai cách đi lên được xem là giống nhau nếu các bậc được đặt chân lên là giống nhau.

Yêu cầu

Hãy tính số cách đi lên hết cầu thang, lấy phần dư khi chia cho \(1\,234\,567\).

Dữ liệu vào

Đọc dữ liệu từ đầu vào chuẩn theo định dạng sau:

  • Dòng đầu tiên chứa hai số nguyên \(N\)\(P\), cách nhau bởi dấu cách.
  • Dòng thứ \(k\) trong \(N\) dòng tiếp theo chứa số nguyên \(h_k\).

Dữ liệu ra

In ra đầu ra chuẩn một dòng chứa một số nguyên: phần dư của số cách đi lên cầu thang khi chia cho \(1\,234\,567\).

Ràng buộc

  • Giới hạn trong kỳ thi gốc: thời gian \(1{,}5\) giây, bộ nhớ \(64\) MB.

  • \(1 \le N \le 500\,000\): số bậc của cầu thang.

  • \(1 \le P \le 500\,000\,000\): tổng độ chênh cao tối đa có thể vượt qua trong một lần bước, tính bằng mm.
  • \(1 \le h_k\) với mọi \(1 \le k \le N\): độ chênh cao của bậc thứ \(k\), tính bằng mm.

Tổng độ chênh cao của các bậc thỏa mãn:

\[ h_1 + \cdots + h_N \le 500\,000\,000. \]

Phân nhóm

Bài này có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.

  • Các bộ kiểm thử có tổng cộng \(50\) điểm thỏa mãn \(N \le 3\,000\).

Ví dụ

Ví dụ 1

Input
6 350
315
191
98
70
126
200
Output
9
Giải thích

Cầu thang này gồm \(6\) bậc và có \(9\) cách đi lên:

  • \(1, 2, 3, 4, 5, 6\).
  • \(1, 2, 3, 4, 6\).
  • \(1, 2, 3, 5, 6\).
  • \(1, 2, 4, 5, 6\).
  • \(1, 2, 4, 6\).
  • \(1, 2, 5, 6\).
  • \(1, 3, 4, 5, 6\).
  • \(1, 3, 4, 6\).
  • \(1, 3, 5, 6\).

Chẳng hạn, ký hiệu \(1, 3, 5, 6\) biểu diễn cách đi lên bậc thứ \(6\) bằng cách đặt chân lên các bậc thứ \(1\), \(3\)\(5\) trước đó.

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: