#P13547. 「2025 集训队互测 R4」产品检测

    ID: 12728 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 8 上传者: 标签>CF2400构造字符串模拟队列集训队互测2025

「2025 集训队互测 R4」产品检测

题目描述

世界上最伟大的公司,lezeron 公司,找你定制一个奇怪的机器。

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

流水线在搭建的时候考虑到了次品的问题,所以每个产品生产时都有一个 01 串编码,检查产品只需要检查:

  • 初始产品编码的 0 和 1 数量相同。
  • 初始产品编码的每一个前缀 0 的数量均不少于 1 的数量。

但同样由于产品的形态,性质等问题,你的机器在检查产品时有很大的限制。具体的说,你的机器由 nn 个检测仓构成,每个检测仓都是下面两者之一:

  • 读取仓:读取并删除产品编码的第一个字符(如果存在),根据读取到的字符(或者没有),将产品运送到另一个检测仓。
  • 追加仓:在产品编码末尾追加任意一个字符,并将产品运送到某个检测仓。

你的检测仓由 1n1 \sim n 编号,新生产的产品会出现在检测仓 11 。还有两个编号特殊的检测仓,001-1,它们不属于上面两种,具体的,运送到 00 的产品会被标记为“合格”,运送到 1-1 的产品会被标记为“次品”。

由于资金有限,你的检测仓不能超过 302302 个,即 1n3001 \leq n \leq 300 。除了字符 0 和字符 1 外,你的追加仓还可以写其它字符,具体的,你可以设定一个字符集 mm ,你的追加仓可以写 0m10 \sim m-1 内每一个字符。由于可用字符有限,你需要保证 2m1282 \leq m \leq 128

由于你的机器是需要有作用的,你的机器不能让同一个产品被运送超过 10610^6 次。如果产品在机器里待了过长时间,lezeron 公司的维修人员就会关闭机器取出产品,并将你的这次检测结果标记为“错误”。

当然,由于 lezeron 公司口碑极佳,少量的检测错误并不会带来很大的影响,因此,lezeron 公司允许你的机器有一定的出错率。当然完美的机器总是更好的,你的机器越优秀,你得到的薪酬越高。

lezeron 公司计划了 1010 种场景,每种场景完全独立。lezeron 公司对你的机器的评价就是每个场景你的机器的表现的和。设计更优秀的机器,拿到更高的薪酬(分数)!

输入格式

一行一个字符串 Print your beautiful answer!,因此你无法通过输入区分各个测试点。

输出格式

第一行两个正整数 n,mn, m

接下来 nn 行,每行若干个数,其中:

  • 第一个数为 tit_i ,表示检测仓类型,tit_i00 表示读取仓,否则表示追加仓。
  • 若检测仓为读取仓,接下来 m+1m+1 个整数 c0,c1,,cm1,e,cic_0, c_1, \ldots, c_{m-1}, e, c_i 表示读取到字符 ii 时产品的运送去向,ee 表示当前产品编码为空时产品的运送去向。
  • 若检测仓为追加仓,接下来两个整数 v,wv, w ,表示在产品编码末尾追加字符 vv ,并将产品运送到检测仓 ww
Print your beautiful answer!

2 2
1 0 2
0 0 -1 1

评分规则

本题一共 1010 个测试点,每个测试点 1010 分,对应 1010 个场景,每个场景都有 100100 个产品用于测试你的机器。集合 S={67,75,84,88,92,93,95,98,99,100}S=\{67,75,84,88,92,93,95,98,99,100\} ,对于每个测试点,若你的你的机器正确检测了 kk 个产品,对于任意 xSx \in S ,若 kxk \geq x ,在这个测试点上你都可以获得一分。

样例输出在每个场景上都可以正确检测 6161 个产品,因此本样例可以获得 00 分。

对于每个测试点,令所有初始产品编码的长度最大为 LL ,有:

测试点编号 LL \leq 测试点编号 LL \leq
11 2×1022 \times 10^2 66 3×1043 \times 10^4
22 1×1031 \times 10^3 77 5×1045 \times 10^4
33 1.2×1031.2 \times 10^3 88 3×1053 \times 10^5
44 5×1035 \times 10^3 99 9×1059 \times 10^5
55 1×1041 \times 10^4 1010 9.5×1059.5 \times 10^5

我们下发了一个毫无意义的 checker,你可以使用任意 C++ 语言编译它(建议用 C++14),编译后(假设可执行文件名带后缀为 kzxwjm.exe),其会从标准输入中读入你的方案,从参数中读入 LL ,并使用随机生成的编码测试你的方案。

运作命令:./kzxwjm.exe Number_L(Linux),kzxwjm.exe Number_L(Windows),其中 Number_L 为数据范围中的 LL 。你可以在后面传入更多参数,尽管这没有意义。

你可以任意修改这个 checker 以满足自己的需求。