#L3985. 「JOI Open 2023」古代机器 2
「JOI Open 2023」古代机器 2
当前没有测试数据。
题目描述
译自 JOI Open 2023 T1 「古代の機械 2 / Ancient Machine 2」
Bitaro 和 Bibako 是挖掘和调查 JOI 王国废墟的考古学家。在废墟中,Bitaro 发现了一块古老的石板,Bibako 发现了一台古老的机器。
从研究结果中,Bitaro 发现石板上写有一个长为 的字符串 。字符串中每个字符要么是 ,要么是 。然而,他还不知道字符串 中的每个字符是什么。
另一方面,从研究结果中,Bibako 弄清了如何使用机器。为了使用它,需要将石板放在机器上,输入一个整数 和两个整数序列 ,然后做一次查询。这里整数 和整数序列 需满足如下条件:
- 整数 在 和 之间(包括两端)。
- 序列 和 的长度均为 。
- 序列 中的元素都是 和 之间的整数(包括两端)。
如果把石板放在机器上,输入整数 和两个整数序列 并做一次查询,机器会按如下方式操作并显示一个整数:
- 机器对其内存区域置 。
- 机器进行如下的 次操作。第 次()操作按如下方式进行:
- 令 表示机器内存区域中当前的整数。机器读取字符 ( 是字符串 中的第 个字符,下标从 开始)。
- 如果 是 ,机器会将内存区域置为 ( 是序列 中第 个元素,下标从 开始)。
- 如果 是 ,机器会将内存区域置为 ( 是序列 中第 个元素,下标从 开始)。
- 机器将展示内存区域中最终置为的整数。
使用这个机器,Bitaro 想要确定石板上写的字符串。但机器十分脆弱,查询次数不能超过 次,且输入机器的整数 的最大值需要越小越好。
实现细节
你需要在程序一开始使用预处理指令 #include
引入库 ancient2.h
,它应实现如下函数:
std::string Solve(int N)
:每组测试数据中仅被调用一次,需返回与石板上字符串 相同的字符串。- 参数 :表示石板上字符串 的长度 。
- 返回要求:
- 长度必须为 ,否则被判为 Wrong Answer [1]。
- 每个字符只能是 或 ,否则被判为 Wrong Answer [2]。
- 必须与 完全相同,否则被判为 Wrong Answer [3]。
你的程序可以调用如下函数:
int Query(int m, std::vector<int> a, std::vector<int> b)
:用于发起一次查询。- 参数说明:
- :输入机器的整数 ,需在 到 之间(包括两端),否则被判为 Wrong Answer [4]。
- :输入机器的两个整数序列,长度均需等于 ,否则被判为 Wrong Answer [5]。
- 中元素需在 到 之间(包括两端),否则被判为 Wrong Answer [6]。
- 返回值:机器最终显示的整数。
- 调用限制:次数不能超过 次,否则被判为 Wrong Answer [7]。
- 参数说明:
注意事项
- 程序可实现其他内部函数或使用全局变量。
- 禁止使用标准输入输出,禁止与其他文件通信,但可将调试信息输出到标准错误输出。
编译和测试运行
可在「附加文件」下载样例 grader 测试程序,需将 grader.cpp
、ancient2.cpp
和 ancient2.h
放在同一文件夹,编译命令如下(或运行 compile.sh
):
g++ -std=gnu++17 -O2 -o grader grader.cpp ancient2.cpp
编译成功后生成可执行文件 grader
。
样例交互器输入
样例交互器从标准输入读取:
- 第一行:整数 。
- 第二行:长为 的字符串 。
样例交互器输出
- 若正确:输出
Query
函数中参数 的最大值,如Accepted: 22
;若未调用Query
且正确,输出Accepted: 0
。 - 若错误:输出错误类别,如
Wrong Answer [4]
;若满足多种错误类别,仅输出其中一种。
数据范围与提示
- 全部数据满足:, 是长为 的 字符串。
- 实际交互器非适应性,即答案在开始时已确定。
- 评分规则:
- 若任意一组数据被判错误,本题得 分。
- 若所有数据正确,分数由 (所有数据
Query
中 的最大值)确定:- 若 ,得 分。
- 若 ,得分为 ( 表示不超过 的最大整数)。
样例交互
假设石板上字符串 是 110
(),样例函数调用如下:
对 Solve 的调用 | 返回值 | 对 Query 的调用 | 返回值 |
---|---|---|---|
Solve(3) |
Query(4, [3,3,2,2], [2,2,1,0]) |
||
Query(2, [0,1], [1,0]) |
|||
Query(1, [0], [0]) |
|||
Query(3, [1,1,1], [1,1,1]) |
|||
110 |
样例 Query 过程(以 Query(4, [3,3,2,2], [2,2,1,0])
为例)
- 机器初始内存为 。
- 第 次操作(,):内存置为 。
- 第 次操作(,):内存置为 。
- 第 次操作(,):内存置为 。
- 最终内存为 ,故返回 。
注:该样例输入不满足 ,满足限制的样例见文件 sample-02.txt
。