CF744E Hongcow Masters the Cyclic Shift
题目描述
Hongcow 的老师听说 Hongcow 学会了循环移位(cyclic shift),于是给他出了如下问题。
你有一个包含 $n$ 个字符串 $s_{1},s_{2},...,s_{n}$ 的列表 $A$。
一个字符串列表 $X$ 被称为稳定(stable),如果满足下列条件:
首先,消息(message)被定义为将 $X$ 中若干元素进行拼接得到的字符串。你可以任意多次使用任意元素,并可以以任意顺序拼接这些元素。设 $S_{X}$ 为你可以从列表 $X$ 拼接出来的所有消息组成的集合。显然,如果 $X$ 非空,$S_{X}$ 的大小是无限的。
现在,定义一个消息是好的(good),当且仅当满足以下条件:
- 假设该消息由 $k$ 个字符串 $w_{1},w_{2},…,w_{k}$ 拼接而成,其中每个 $w_{i}$ 均为 $X$ 的元素。
- 考虑该字符串的 $|w_{1}|+|w_{2}|+⋯+|w_{k}|$ 次循环移位。设 $m$ 表示这些循环移位中属于 $S_{X}$ 的移位个数。
- 当且仅当 $m$ 恰好等于 $k$ 时,该消息为好消息(good message)。
当 $S_{X}$ 中的每个消息都是好消息时,称列表 $X$ 为稳定列表(stable list)。
设 $f(L)$ 定义为:如果 $L$ 是稳定列表,则 $f(L)=1$,否则 $f(L)=0$。
求 $f(L)$ 的和,其中 $L$ 为 $A$ 的任意一个非空连续子列表。(总共有 $\frac{n(n+1)}{2}$ 个连续子列表。)
输入格式
第一行输入一个整数 $n$($1 \leq n \leq 30$),表示列表中的字符串数量。
接下来 $n$ 行每行输入一个字符串 $s_{i}$(每个字符串只包含小写字母字符,$1 \leq |s_i| \leq 10$)。
输出格式
输出一个整数,表示有多少非空连续子列表是稳定的。
说明/提示
对于第一个样例,共有 $10$ 个连续子列表需要考虑。子列表 \["a", "ab", "b"\]、\["ab", "b", "bba"\] 以及 \["a", "ab", "b", "bba"\] 不是稳定的。其余七个连续子列表是稳定的。
例如,$X = [$"a", "ab", "b"$]$ 不是稳定的,因为消息 "ab"+"ab"="abab" 有四个循环移位 \["abab", "baba", "abab", "baba"\],这些都属于 $S_X$。
由 ChatGPT 5 翻译