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

Đề bài

Mô tả

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

n+1 vị trí có thể đặt nhát cắt: trước b0, giữa b0b1, giữa b1b2, ..., và sau bn1.

Xét một tập gồm k nhát cắt (k2) đặ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 k1 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 k1 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 1011010011105 nhát cắt tạo thành:

101101001110

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=k2f(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

  • 1n75.
  • Xâu chỉ gồm các ký tự 01.

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)=2s=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 0s=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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0