[AGC020E] Encoding Subsets
题意翻译
我们定义一个 `01` 串的压缩是满足如下方式的字符串变化过程:
- $0\rightarrow 0,1\rightarrow 1$
- 如果 $A\rightarrow P,B\rightarrow Q$ 合法,那么 $A+B\rightarrow P+Q$ 也合法(其中 $+$ 代表字符串拼接)
- 如果 $S=\underbrace{A+A+\cdots+A}_{n\text{个}(n\ge 2)}$,那么 $S\rightarrow(A\times n)$ 也合法(其中 `(`, `)`, `×` 为字符,$n$ 为数字,算作一个字符,即使其中有 $0/1$)
我们同时定义 $01$ 串 $B$ 是 $A$ 的子集当且仅当:
- $|A|=|B|$
- $\forall B_i=1,A_i=1$
现在给你一个 $01$ 串 $S$,问它所有的子集的合法变化结果数的总和为多少。
答案对 $998244353$ 取模。
题目描述
[problemUrl]: https://atcoder.jp/contests/agc020/tasks/agc020_e
次のような、`0` と `1` からなる文字列をエンコードする規則を考えます。
- 文字列 `0`、`1` はそれぞれ `0`、`1` とエンコードできる。
- 文字列 $ A $、$ B $ をそれぞれ $ P $、$ Q $ とエンコードできる場合、文字列 $ AB $ を $ PQ $ とエンコードできる。
- 文字列 $ A $ を $ P $ とエンコードできる場合、$ K\ \geq\ 2 $ を正の整数として、文字列 $ AA...A $($ A $ を $ K $ 個連結したもの)を `(`$ P $`x`$ K $`)` とエンコードできる。
例えば、文字列 `001001001` は `001001001`、`00(1(0x2)x2)1`、`(001x3)` などとエンコードすることができ、この他のエンコード方法も存在します。
また、次の条件が満たされるとき、文字列 $ A $ は文字列 $ B $ の *サブセット* であると呼びます。
- $ A $ と $ B $ は長さが等しく、どちらも `0` と `1` からなる。
- $ A_i $ = `1` であるようなすべての添字 $ i $ に対して、$ B_i $ = `1` でもある。
`0` と `1` からなる文字列 $ S $ が与えられます。$ S $ のすべてのサブセットについて、それぞれをエンコードする方法が何通り存在するか求め、それらの個数の総和を $ 998244353 $ で割ったあまりを求めてください。
输入输出格式
输入格式
入力は標準入力から以下の形式で与えられる。
> $ S $
输出格式
$ S $ のすべてのサブセットについてのエンコード方法の個数の総和を $ 998244353 $ で割ったあまりを出力せよ。
输入输出样例
输入样例 #1
011
输出样例 #1
9
输入样例 #2
0000
输出样例 #2
10
输入样例 #3
101110
输出样例 #3
156
输入样例 #4
001110111010110001100000100111
输出样例 #4
363383189
说明
### 制約
- $ 1\ \leq\ |S|\ \leq\ 100 $
- $ S $ は `0` と `1` からなる。
### Sample Explanation 1
$ S $ のサブセットは $ 4 $ 個存在し、 - `011` は `011`、`0(1x2)` とエンコードできます。 - `010` は `010` とエンコードできます。 - `001` は `001`、`(0x2)1` とエンコードできます。 - `000` は `000`、`0(0x2)`、`(0x2)0`、`(0x3)` とエンコードできます。 したがって、$ S $ のすべてのサブセットについてのエンコード方法の個数の総和は $ 2\ +\ 1\ +\ 2\ +\ 4\ =\ 9 $ 通りです。
### Sample Explanation 2
今回は $ S $ のサブセットは $ 1 $ 個しか存在しませんが、$ 10 $ 通りの方法でエンコードできます。
### Sample Explanation 4
結果を $ 998244353 $ で割ったあまりを出力することを忘れずに。