trang chủ / đề bài / phoenixpc

Bật dãy máy tính

Đề bài

Mô tả

Có n máy tính xếp thành một hàng, đánh số từ 1 đến n. Ban đầu tất cả đều đang tắt, và bạn muốn bật tất cả chúng.

Bạn bật các máy bằng tay, mỗi lần một máy. Tại bất kỳ thời điểm nào, nếu máy i−1 và máy i+1 đều đang bật thì máy i (với 2≤i≤n−1) sẽ tự động bật nếu nó chưa bật. Bạn không được bật bằng tay một máy đã tự động bật.

Nếu chỉ xét dãy các máy được bật bằng tay, hỏi có bao nhiêu cách để bật hết tất cả các máy? Hai dãy được coi là khác nhau nếu tập hợp các máy được bật bằng tay khác nhau, hoặc thứ tự bật bằng tay khác nhau.

Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho M.

Dữ liệu vào

Một dòng duy nhất chứa hai số nguyên n và M: số lượng máy tính và số chia lấy dư.

Dữ liệu ra

In ra một số nguyên duy nhất: số cách bật tất cả các máy tính, lấy phần dư khi chia cho M.

Ràng buộc

  • 3≤n≤400
  • 108≤M≤109, và M là số nguyên tố

Ví dụ

Input Output Giải thích
3 100000007 6 Sáu dãy bật bằng tay là: [1,3], [3,1], [1,2,3], [2,1,3], [2,3,1], [3,2,1]. Với dãy [1,3], sau khi bật máy 1 rồi máy 3 thì máy 2 tự động bật, nên nó không xuất hiện trong dãy.
4 100000007 20 Chẳng hạn [1,2,4] hợp lệ: bật 1, bật 2, bật 4, khi đó máy 3 tự động bật. Còn [1,2,3,4] không hợp lệ vì sau khi bật 1, 2, 4 thì máy 3 đã tự bật, không thể bật tay nữa.
400 234567899 20914007 Trường hợp lớn nhất.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0