【MX-X4-T7】「Jason-1」Ball

题目描述

**这是一道提交答案题。** 你有 $10$ 个盒子,每个任务会给出一个 $n$,初始时前 $n$ 个盒子内**可能**有一些球,后 $10-n$ 个盒子为空。 用小写字母表示每种颜色的球,初始时最多只有三种颜色的球,分别用 $\tt a, b, c$ 表示。而在程序中,你可以使用**任何小写字母**表示对应颜色的球。 定义一个盒子**包含**一个字符串,表示对于每种颜色的球,盒子中出现的个数不小于字符串中出现的个数。 从一个盒子中**删除**一个字符串,表示对于字符串中每一个小写字母代表的球,从盒子中取走一个相同颜色的球。删除的前提是需要满足此盒子包含该字符串。 向一个盒子中**放入**一个字符串,表示对于字符串中每一个小写字母代表的每个球,向盒子中放入一个相同颜色的球。 你需要写一个程序完成一些任务,程序包含下面几种语句可供使用: - `change x s y t`,其中 $x, y$ 是不超过 $10$ 的非负整数,$s, t$ 是仅由小写字母或单个字符 `@` 组成的**非空**字符串(**如果为 `@` 则表示将该字符串视作空串**)。如果 $x$ 为 $0$,则将 $k$ 由 $1$ 遍历到 $10$,否则 $k = x$。如果盒子 $k$ 中包含字符串 $s$,从其中删除 $s$,并在盒子 $y$ 中放入字符串 $t$,如果 $y=0$ 则在当前的 $k$ 中(原地)放入,这样就视为成功执行命令。每当成功执行命令后,立刻回到上一个断点,无论 $k$ 是否完全遍历。如果没有成功执行命令,跳转到下一条语句。 - `#` 表示一个断点。**你必须以一行断点结束整个程序**。认为第 $0$ 行也是一个断点,此断点不计入代价。 **语句数**可简单地视为程序中 `change` 和 `#` 的数量之和,第 $0$ 行的虚拟断点不计入,最后一行的断点计入。 **断点数**可简单地视为程序中 `#` 的数量。第 $0$ 行的虚拟断点不计入,最后一行的断点计入。 你不能使用超过 $100$ 条语句,超过 $10$ 的盒子或是非小写字母的球,任意一个盒子中某种颜色的球的个数均不能超过 $10^{8}$,程序中的单个字符串长度不能超过 $200$,你的程序单组数据实际遍历的语句条数不能超过 $4 \times 10^5$,单组数据实际判断包含的字符集大小之和不能超过 $10^7$(参考下发的检验器)。 约定 $n$ 表示输入至多使用的盒子数,$mx$ 表示初始时每个盒子中每种颜色球个数的最大值,$max$ 表示初始时所有盒子中球总数的最大值,$sum$ 表示初始时所有盒子中球的总数。**任务中未提及的盒子必须保持原状**,你需要分别完成下面 $10$ 个任务。 1. $n=10, sum \le 100$,你需要将所有 $\tt a$ 颜色球放入盒子 $1$,所有 $\tt b$ 颜色球放入盒子 $2$,所有 $\tt c$ 颜色球放入盒子 $3$。 2. $n=10, sum \le 100$,你需要将所有 $\tt a$ 颜色的球改为 $\tt b$ 颜色的球,将所有 $\tt b$ 颜色的球改为 $\tt c$ 颜色的球,将所有 $\tt c$ 颜色的球改为 $\tt a$ 颜色的球,这三个操作应同时完成。 3. $n=10, sum \le 100$,你需要将所有不包含 $\tt a$ 颜色球的盒子清空。 4. $n=10, sum \le 100$,你需要给所有非空的,不包含 $\tt a$ 颜色球的盒子放入一个 $\tt a$ 颜色球。 5. $n=5, sum \le 5$,你需要将所有球按照颜色从小到大(${\tt a} < {\tt b} < {\tt c}$)依次放入盒子 $1$ 到 $sum$,每个盒子恰好只放一个球,初始的球不保留。 6. $n=10, sum \le 100$,对于每个盒子,只保留一个出现次数最多的颜色的球,如果有多种颜色出现次数最多,将其变为空集。 7. $n=10, sum \le 100$,对于每个盒子,只保留出现次数最多的颜色的球,如果有多种颜色出现次数最多,保留颜色最小的(${\tt a} < {\tt b} < {\tt c}$)。 8. $n=1, mx \le 10$,记 $\tt a, b, c$ 颜色的球的个数为 $A, B, C$,你需要对于满足 $1 \le x \le 5$ 的整数 $x$ 使得盒子 $x$ 在最终恰好有 $A+Bx+Cx^2$ 个 $\tt a$ 颜色球,不能有其它颜色球。 9. $n=5, max \le 10$,所有 $n$ 个盒子中球总数相等。将每个盒子中的球按从小到大排序,组成一个字符串,保证字符串两两不同。你需要对于每个字符串求出其字典序排名,按字典序从小到大依次将盒子改为 $\tt a, b, c, d, e$。 10. $n=5, max \le 10$,你需要对 $n$ 个盒子求前缀和,即将前面所有盒子的球复制一份放入自己。 **注:子任务按某种规则排序,与难度无关。**

输入输出格式

输入格式


该题为提交答案型试题,每个测试点对应的任务见【题目描述】。

输出格式


针对给定的 $10$ 个任务,你需要分别将你的程序命名为 `1.out`∼`10.out`,并将这 $10$ 个文件直接压缩为 `zip` 文件提交。 每个文件中需要包含若干行。 第一行一个非负整数 $L$,代表你使用的语句数。 接下来 $L$ 行,每行一个语句。 **你必须以一个断点结尾。**

输入输出样例

输入样例 #1

见附件 down.zip 中的 sample 文件夹

输出样例 #1

见附件 down.zip 中的 sample 文件夹

说明

**【自定义校验器数据格式】** 第一行,两个整数 $T, V$,分别表示数据组数与评分参数。 对于接下来每组数据: 第一行,两个整数 $n,m$,表示需要描述的输入盒子数与输出盒子数。 第二行,$n$ 个字符串,描述输入时前 $n$ 个盒子的状态。 第三行,$m$ 个字符串,描述输出时前 $m$ 个盒子的状态,**你仍然需要保证其它盒子为空**。 **同样地,使用 `@` 表示空串**。 **【自定义校验器使用方法】** 将 `checker.cpp` 编译后,在命令行执行 ``` checker [in] [out] [ans] ``` 其中 `[in]` 为测试数据,`[out]` 为你需要测试的程序,`[ans]` 输入和 `[in]` 相同的内容。 例如你需要测试第一个样例,且你的程序名为 `1.out`,需先将 `1.in` 复制到当前目录,并执行 ``` checker 1.in 1.out 1.in ``` **【评分标准】** 对于每个测试点,其内部会评测若干组测试数据。 若你的输出出现下列情况,那么该测试点不得分: - 输出与要求不符。 - 出现无法识别或不合法的语句。 - 某个盒子中某种颜色的球数量超过 $10^8$。 - 使用超过 $100$ 条语句。 - 程序中单个字符串长度超过 $200$。 - 使用不在 $1$ 到 $10$ 之间的盒子。 - 使用非小写字母颜色的球。 - 单组数据实际语句遍历次数大于 $4 \times 10^5$。 - 单组数据实际判断包含的字符集大小之和超过 $10^7$(参考下发的检验器)。 语句数可简单地视为程序中 `change` 和 `#` 的数量之和,第 $0$ 行的虚拟断点不计入,最后一行的断点计入。 断点数可简单地视为程序中 `#` 的数量。第 $0$ 行的虚拟断点不计入,最后一行的断点计入。 一个程序的代价是你给出的断点数量乘以程序的语句数,记作 $val$。 否则设对应子任务的评分标准为 $V$,那么你的得分为: $$\mathrm{score}=\begin{cases}11&V>val\\\Big\lfloor\frac{10}{\exp\left(1-\frac {V}{val}\right)}\Big\rfloor&\text{otherwise.}\end{cases}$$ 下面给出各个任务对应的评分标准 $V$: | 编号 | $1$ | $2$ | $3$ | $4$ | $5$| $6$ | $7$ | $8$ | $9$ | $10$ | | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | | $V$ | $16$ | $16$ | $16$ | $16$ | $26$ | $8$ | $10$ | $18$ | $20$ | $30$ |