CF1383E Strange Operation

题目描述

考拉 Koa 有一个长度为 $n$ 的二进制字符串 $s$。Koa 最多可以进行 $n-1$ 次(也可以不进行)如下操作: 每次操作,Koa 选择某个 $i$,满足 $1 \le i < |s|$,将 $s_i$ 变为 $max(s_i, s_{i+1})$,然后删除 $s$ 的第 $i+1$ 个字符(删除后剩余部分拼接起来)。 注意,每次操作后,$s$ 的长度减少 $1$。 Koa 最多可以进行 $n-1$ 次操作(也可以不操作),问 Koa 最多能得到多少种不同的二进制字符串?请将答案对 $10^9+7$ 取模后输出。

输入格式

输入仅一行,包含一个二进制字符串 $s$($1 \le |s| \le 10^6$)。对于所有 $i$($1 \le i \le |s|$),$s_i = 0$ 或 $s_i = 1$。

输出格式

输出一个整数,表示不同二进制字符串的数量,对 $10^9+7$ 取模。

说明/提示

在第一个样例中,Koa 可以得到的二进制字符串有:$0$、$00$ 和 $000$。 在第二个样例中,Koa 可以得到的二进制字符串有:$1$、$01$、$11$、$011$、$101$ 和 $0101$。例如: - 要从 $0101$ 得到 $01$,Koa 可以这样操作:$0101 \rightarrow 0(10)1 \rightarrow 011 \rightarrow 0(11) \rightarrow 01$。 - 要从 $0101$ 得到 $11$,Koa 可以这样操作:$0101 \rightarrow (01)01 \rightarrow 101 \rightarrow 1(01) \rightarrow 11$。 括号表示 Koa 每次操作选择的两个位置。 由 ChatGPT 4.1 翻译