atcoder#AGC020E. [AGC020E] Encoding Subsets

[AGC020E] Encoding Subsets

分数:14001400

问题描述

考虑以下对由 01 组成的字符串进行编码的规则:

  • 字符串 01 可以分别编码为 01
  • 如果字符串 AABB 分别可以编码为 PPQQ,则字符串 ABAB 可以编码为 PQPQ
  • 如果字符串 AA 可以编码为 PP,并且 K2K \geq 2 是一个正整数,那么字符串 AA...AAA...AAA 重复 KK 次)可以编码为 (PPxKK)

例如,字符串 001001001 可以编码为 00100100100(1(0x2)x2)1(001x3) 等。

我们称字符串 AA 是字符串 BB 的子集,如果:

  • AABB 长度相等,且都由 01 组成;
  • 对于所有 ii 的索引,使得 AiA_i = 1,也有 BiB_i = 1

给定由 01 组成的字符串 SS。找出所有 SS 的子集的不同编码总数,结果对 998244353998244353 取模。

约束条件

  • 1S1001 \leq |S| \leq 100
  • SS01 组成。

输入格式

输入从标准输入中给出,格式如下:

SS

输出格式

输出所有子集的不同编码总数,对 998244353998244353 取模。

011
9

对于 SS 的四个子集:

  • 011 可以编码为 0110(1x2)
  • 010 可以编码为 010
  • 001 可以编码为 001(0x2)1
  • 000 可以编码为 0000(0x2)(0x2)0(0x3)

因此,所有子集的编码总数为 2+1+2+4=92 + 1 + 2 + 4 = 9

0000
10

这次 SS 只有一个子集,但可以用 1010 种不同的方式编码。

101110
156
001110111010110001100000100111
363383189

不要忘记对结果取模 998244353998244353