P12422 【MX-X12-T5】「ALFR Round 5」Another string problem

题目背景

原题链接:。 --- 决(け)して逃(に)げない怖(こわ)くはないから 目(め)を开(あ)け弱(よわ)さをかき消(け)すんだ

题目描述

我们定义 $S\mid T$ 为:设 $k=\lfloor |T|/|S| \rfloor$,则 $k$ 个 $S$ 连起来在 $T$ 中以子序列出现过。例如 $S=\textsf{ab},T=\textsf{abcab}$,则 $S\mid T$,$T$ 中出现的 $S$ 有 $\underline{\textsf{ab}}\textsf c{\underline{\textsf{ab}}}$。 对于 $t$ 组测试数据,给定一个 $S$ 和正整数 $q$,$q$ 次询问: - 给定 $T_i$,问是否 $T_i\mid S$。如果 $T_i\mid S$,输出 `Yes`,否则输出 `No`。

输入格式

输出格式

说明/提示

**【样例解释】** 第一组测试数据中,$T=\textsf{abc}$ 时可以在 $S$ 种寻找到 $\textsf{abcabc}$ 作为子序列,具体的,$S$ 种出现的 $T$ 有 $\underline{\textsf{abc}}\textsf a{\underline{\textsf{abc}}}$。而 $T=\textsf{ab}$ 时 $\textsf{ababab}$ 不是 $S$ 的子序列。 第二组测试数据中,第一、三个询问分别有 $\underline{\textsf{ab}}\textsf a{\underline{\textsf{abab}}}$、$\underline{\textsf{aba}} {\underline{\textsf{aba}}}\textsf b$。 **【数据范围】** **本题使用捆绑测试。** 对于 $100\%$ 的数据,$1 \le t \le 2\times 10^5$,$\lvert S\rvert,q,\lvert T_i\rvert\ge 1$,$\sum \lvert S\rvert\le 2\times 10^5$,$\sum q\le 2\times 10^5$,$\sum \sum \lvert T_i\rvert\le 4\times 10^5$,并且 $|T_i|\le |S|$。$S,T_i$ 均由小写英文字符(`a` 到 `z`)组成。 | 子任务 | $\sum \lvert S\rvert\le$ | 特殊性质 | 分值 | | :----------: | :----------: | :----------: | :----------: | | $1$ | $2\times 10^5$ | $\lvert S\rvert\le 10$ | $3$ | | $2$ | $3\times 10^3$ | 无 | $17$ | | $3$ | $2\times 10^5$ | 数据随机$^†$ | $2$ | | $4$ | $2\times 10^5$ | $S$ 中不同字符最多 $1$ 种 | $8$ | | $5$ | $2\times 10^5$ | $S$ 中不同字符最多 $2$ 种 | $15$ | | $6$ | $10^5$ | 无 | $20$ | | $7$ | $2\times 10^5$ | 无 | $35$ | $†$:并非完全均匀随机字符,具体见【**子任务 3 数据随机方式**】。 **【子任务 3 数据随机方式】** 下面是造“数据随机”的部分分的代码(因为 `generator` 较长,这里是所有有关片段): ```cpp mt19937 rng((unsigned long long) new char); int rnd_l(int l,int r){ return rng()%(r-l+1)+l; } char rnd(vector v){ // 0~25 权重 int sum=0; for (auto u : v) sum+=u; int r=rng()%(sum)+1,c=0; sum=0; for (auto u : v){ if (sum+u>=r) return c+'a'; c++; sum+=u; } } vector pl; void rnd_g(){ string s=rnd_s(pl,n); cout