Bí mật của trại Felicity

Đề bài

Mô tả

Cho một xâu nhị phân b=b0b1…bn−1 có độ dài n (mỗi ký tự là 0 hoặc 1).

Có n+1 vị trí có thể đặt nhát cắt: trước b0, giữa b0 và b1, giữa b1 và b2, ..., và sau bn−1.

Xét một tập gồm k nhát cắt (k≥2) đặt tại k vị trí khác nhau. Khi đó giữa hai nhát cắt liên tiếp sẽ có một xâu con nhị phân, tạo thành đúng k−1 xâu con. Các ký tự nằm trước nhát cắt đầu tiên và sau nhát cắt cuối cùng bị bỏ đi (không tính đến). Mỗi xâu con được đọc như một số nhị phân (cho phép chữ số 0 ở đầu).

Gọi m là số lớn nhất trong k−1 số thu được. Tập k nhát cắt được gọi là hợp lệ nếu tất cả các số thu được đều dương và tập hợp các số thu được chứa tất cả các số nguyên từ 1 đến m.

Ví dụ với xâu 101101001110 và 5 nhát cắt tạo thành:

10∣11∣010∣01∣1∣10

thu được 4 xâu con 11,010,01,1 ứng với các số 3,2,1,1. Ở đây m=3; mọi số đều dương và ta có đủ các số từ 1 đến 3, nên đây là một tập 5 nhát cắt hợp lệ.

Gọi f(k) là số tập hợp lệ gồm đúng k nhát cắt. Hai tập nhát cắt được coi là khác nhau nếu có một nhát cắt thuộc tập này nhưng không thuộc tập kia.

Hãy tính

s=∑k≥2f(k)

và in ra s theo modulo 109+7.

Dữ liệu vào

  • Dòng thứ nhất chứa số nguyên n — độ dài của xâu.
  • Dòng thứ hai chứa xâu nhị phân độ dài n.

Dữ liệu ra

  • In ra một số nguyên duy nhất: giá trị s theo modulo 109+7.

Ràng buộc

  • 1≤n≤75.
  • Xâu chỉ gồm các ký tự 0 và 1.

Ví dụ

Input Output Giải thích
4
1011
10 Các tập nhát cắt hợp lệ: kích thước 2: |1|011, 1|01|1, 10|1|1, 101|1|; kích thước 3: |1|01|1, |10|1|1, 10|1|1|, 1|01|1|; kích thước 4: |10|1|1|, |1|01|1|. Vậy f(2)=4, f(3)=4, f(4)=2 và s=10.
2
10
1 Chỉ có một tập hợp lệ (kích thước 2): |1|0, thu được số 1. Vậy f(2)=1, các f(k) khác bằng 0 và s=1.

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