UOJ Logo Universal Online Judge

UOJ

#1027. 【集训队互测2025】产品检测

附件下载 统计

世界上最伟大的公司——lezeron 公司——希望你为它定制一台奇怪的机器。

lezeron 公司搭建了一条流水线,生产一种价值 $50$ Coins 的产品。然而,由于流水线刚刚建成,难免会产生一些次品。你的机器需要找出这些次品。

流水线在搭建时已经考虑到了次品检测的问题,因此每个产品在生产时都会获得一个 01 串编码。一个产品合格,当且仅当其初始编码满足:

  • 编码中字符 0 与字符 1 的数量相同;
  • 编码的每一个前缀中,字符 0 的数量均不少于字符 1 的数量。

由于产品的形态与性质等因素,你的机器在检查产品时受到很大的限制。

具体地,你的机器由 $n$ 个检测仓构成,每个检测仓均为以下两种类型之一:

  • 读取仓:读取并删除产品编码的第一个字符。如果编码非空,则根据读到的字符将产品运送到另一个检测仓;如果编码为空,则按照单独指定的去向运送产品。
  • 追加仓:在产品编码末尾追加一个指定字符,并将产品运送到另一个检测仓。

普通检测仓的编号为 $1 \sim n$,新生产的产品会首先出现在检测仓 $1$。

此外,还有两个特殊检测仓 $0$ 与 $-1$,它们不属于上述两种类型:

  • 被运送到检测仓 $0$ 的产品会被标记为“合格”;
  • 被运送到检测仓 $-1$ 的产品会被标记为“次品”。

由于资金有限,检测仓总数不能超过 $302$ 个。也就是说,普通检测仓的数量需要满足 $1 \le n \le 300$。

除了字符 0 与字符 1 以外,追加仓还可以写入其他字符。你可以自行设定字符集大小 $m$,追加仓可以写入 $0 \sim m - 1$ 中的任意字符。你需要保证 $2 \le m \le 128$。

为了保证机器确实能够工作,同一个产品被运送的次数不能超过 $10^6$。如果产品在机器中停留过久,lezeron 公司的维修人员会关闭机器并取出产品,将本次检测结果标记为“错误”。

lezeron 公司允许机器存在一定的出错率,但机器越优秀,你获得的薪酬越高。

lezeron 公司设计了 $10$ 种彼此独立的场景。公司对机器的最终评价,为机器在这 $10$ 个场景中所得分数之和。

请设计尽可能优秀的机器。

输入格式

输入仅包含一行字符串:

Print your beautiful answer!

因此,你无法通过输入区分不同测试点。

输出格式

第一行输出两个正整数 $n,m$,分别表示普通检测仓的数量与字符集大小。

接下来输出 $n$ 行,第 $i$ 行描述检测仓 $i$:

  • 第一个整数为 $t_i$,表示检测仓的类型。$t_i = 0$ 表示读取仓,否则表示追加仓。
  • 如果检测仓 $i$ 是读取仓,则接下来输出 $m + 1$ 个整数 $c_0,c_1,\dots,c_{m - 1},e$:
    • $c_j$ 表示读取到字符 $j$ 时,产品被运送到的检测仓;
    • $e$ 表示当前产品编码为空时,产品被运送到的检测仓。
  • 如果检测仓 $i$ 是追加仓,则接下来输出两个整数 $v,w$,表示在产品编码末尾追加字符 $v$,并将产品运送到检测仓 $w$。

样例

input

Print your beautiful answer!

output

2 2
1 0 2
0 0 -1 1

评分规则

本题共有 $10$ 个测试点,每个测试点对应一个场景,满分均为 $10$ 分。每个场景中有 $100$ 个产品用于测试你的机器。

定义集合 $S = \{67,75,84,88,92,93,95,98,99,100\}$。

对于每个测试点,设你的机器正确检测了 $k$ 个产品。对于每个 $x \in S$,若 $k \ge x$,则你在该测试点获得 $1$ 分。

样例输出在每个场景中都能正确检测 $61$ 个产品,因此样例输出的得分为 $0$ 分。

对于每个测试点,设其中所有初始产品编码的最大长度为 $L$。各测试点的 $L$ 如下:

测试点编号 $L \le$ 测试点编号 $L \le$
$1$ $2 \times 10^2$ $6$ $3 \times 10^4$
$2$ $10^3$ $7$ $5 \times 10^4$
$3$ $1.2 \times 10^3$ $8$ $3 \times 10^5$
$4$ $5 \times 10^3$ $9$ $9 \times 10^5$
$5$ $10^4$ $10$ $9.5 \times 10^5$

下发文件中包含一个仅供参考的 checker。你可以使用任意 C++ 标准编译它,建议使用 C++14。

假设编译后的可执行文件名为 kzxwjm.exe,它会从标准输入读取你的方案,从命令行参数中读取 $L$,并使用随机生成的编码测试你的方案。

运行方式如下:

./kzxwjm.exe Number_L

在 Windows 下,可以使用:

kzxwjm.exe Number_L

其中,Number_L 表示需要测试的最大编码长度 $L$。

你也可以在命令后传入更多参数,但这些参数没有实际意义。

你可以任意修改该 checker,以满足自己的测试需求。

时间限制:$\texttt{1s}$

空间限制:$\texttt{256MB}$