【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$ |