# 吃糖果 - 参考时间限制:1.0 秒(参考环境:[评测环境与性能](../../../docs/评测环境与性能.md);仅供预估) - 实际时间限制:标准程序在目标评测环境中处理最慢正式测试文件的基准时间的 2 倍,按 0.5 秒的倍数向上取整;若平台仅支持更粗的粒度,再向上取整到平台可设置值。 - 内存限制:512 MB ## 背景故事 你得到了一串糖果,但只愿意吃其中符合自己口味的连续片段。给定你喜欢的糖果串,最多能从这串糖果中吃到多少段?这里统计的是吃到的段数,而不是不同糖果串的种类数。 每颗糖只能吃一次。所有片段都从原来的糖果串中选取,不能重叠,也不能把吃剩的部分重新拼接成新的片段。 ## 形式化问题描述 给定一个非空二进制串 $T$ 和 $n$ 个非空二进制串 $P_1,\ldots,P_n$ . 你可以选择若干个两两不相交的区间 $[l_i,r_i]$ ,使得每个子串 $T[l_i\ldots r_i]$ 都等于某个 $P_j$ . 同一个 $P_j$ 可以匹配多个所选片段,清单中也允许出现相同的字符串。 求最多可以选择多少个区间。若 $n=0$ ,答案为 $0$ . ## 输入格式 第一行一个整数 $n$ . 第二行一个非空二进制串 $T$ . 接下来 $n$ 行,每行一个非空二进制串 $P_i$ . ## 输出格式 输出一个整数,表示最多能选择的片段数。 ## 样例 1 ### 输入 ```text 5 010101010111 010 01 11 1000 1110 ``` ### 输出 ```text 6 ``` ### 解释 可以依次选择五段 `01` 和最后一段 `11` ,一共六段。 ## 数据范围与保证 - $0\le n\le 100\,000$ . - $1\le |T|\le 5\,000\,000$ . - $\sum_{i=1}^{n}|P_i|\le 5\,000\,000$ ,且每个 $P_i$ 非空。 ### 数据分组 | 分值比例 | 额外条件 | | --- | --- | | 30% | $\lvert T\rvert\le 1\,000$ ,$\sum_{i=1}^{n}\lvert P_i\rvert\le 10\,000$ | | 20% | $\lvert T\rvert\le 100\,000$ ,$n\le 500$ ,每个 $\lvert P_i\rvert\le 30$ | | 20% | 所有 $P_i$ 等长;$\lvert T\rvert$ 和 $\sum_{i=1}^{n}\lvert P_i\rvert$ 均不超过 $5\,000\,000$ | | 30% | 无额外条件 |