P12472 [集训队互测 2024] 基础 ABC 练习题

题目描述

给定两个集合 $S_1,S_2$,定义一个长度为 $3n$ 且仅包含 `ABC` 三种字符的串 $s$ 是好的,当且仅当存在一种方案将 $s$ 划分成 $n$ 个长度为 $3$ 的子序列,且这 $n$ 个子序列都是 `ABC`,`BCA` 或 `CAB`。设 $n$ 个子序列中 `ABC` 的个数为 $x$,`BCA` 的个数为 $y$,还要求 $x\in S_1,y\in S_2$。 现在有一个长度为 $3n$ 的字符串 $s$,字符串中仅包含 `ABC?` 四种字符,你需要计算将所有 `?` 都分别替换成 `ABC` 三个字符中的某一个的方案,使得串 $s$ 是好的。 对 $2^{32}$ 取模。

输入格式

**本题单个测试点内有多组测试数据** 第一行两个整数 $T,id$,表示数据组数和子任务编号,保证 $T=60,id\in[0,5]$,$id=0$ 表示是样例。 对于每组数据,第一行一个整数 $n$。 第二行一个长度为 $n+1$ 的 01 串 $s_1$。若 $s_1$ 中第 $i$ 个字符为 $1$,则表示 $S_1$ 中含有 $i-1$ 这个元素,否则不含。第三行以同样的格式刻画 $S_2$。 第四行一个长度为 $3n$ 的字符串 $s$。 对于第 $i$ 组数据,保证 $n=i$。

输出格式

对于每组数据,输出一行一个整数,表示答案。 **你可以选择是否回答每组数据,详情见说明部分**。

说明/提示

### 样例解释 1 这个样例不满足 $T=60$ 的限制,仅为理解题意用。 ### 样例 2,3 见下发文件,分别满足子任务 1,2 的性质。 ### 提示与说明 | Subtask | 分值 | 特殊限制 | | ------- | ---- | ------------------------------------------------------------ | | 1 | $20$ | $s$ 中没有 `?`,且 $ \left\vert S_1\right\vert=\left\vert S_2\right\vert=n+1 $ | | 2 | $20$ | $s$ 中没有 `?` | | 3 | $10$ | $s$ 中只有 `?`,且 $ \left\vert S_1\right\vert=\left\vert S_2\right\vert=n+1 $ | | 4 | $20$ | $ \left\vert S_1\right\vert=\left\vert S_2\right\vert=n+1 $ | | 5 | $30$ | 无特殊限制 | 对于所有数据,保证 $T=60$。对于每个测试点内的第 $i$ 组测试数据,保证 $n=i$。 ~~测试时开启所有合理的子任务依赖。~~ 子任务依赖尚未配置。 对于每个测试点内的每组测试数据,如果你不打算回答这组测试数据,请输出 $-1$。否则输出一个整数表示答案。如果格式不正确不保证能得到对应的分数。 对于每个测试点,会根据你的输出给出你在这组数据上的评分系数 $p\in [0,1]$。每个 Subtask 的得分是这个 Subtask 中所有测试点得分系数的最小值乘以这个 Subtask 的分值。 首先,你的程序需要正常结束并且所有你选择回答的答案均正确,否则 $p=0$。 在此基础上,记 $d$ 为在所有数据中你的程序选择回答的最大的 $n$,则有 $$ p= \begin{cases} \frac{1}{20} d && d\leq 5 \\ \frac{1}{4}+\frac{1}{50}(d-5) && d\leq 15 \\ \frac{9}{20}+\frac{3}{200}(d-15) && d\leq 35 \\ \frac{3}{4}+\frac{1}{100}(d-35) && d\leq 60 \end{cases} $$ $p$ 与 $d$ 的大致图像如下图所示。 ![](https://cdn.luogu.com.cn/upload/image_hosting/qtq4b9l1.png)