#P16742. 这是一道交互题
这是一道交互题
这是一道交互题(Hydro 批量交互版)
题目背景
May 和 Cody 正在玩一个猜灯游戏。May 面前有一个长度为 的环,环上每个位置有一盏灯,每盏灯只有亮()和灭()两种状态。
灯的初始状态由 May 决定,并保证初始时并非所有灯都亮着。在任意时刻,May 都可以任意旋转这个环。
Cody 每轮给出一个长度为 的 序列。对于序列中为 的位置,May 会翻转相应位置灯的状态;为 的位置不变。由于 May 可以任意旋转环,你也可以理解为:在执行每次操作之前,May 可以将你的操作掩码循环移动任意位。
如果某一轮操作后所有灯都亮起,则 Cody 获胜。
Hydro 适配说明
原题是函数式交互题。为了避免在 Hydro 中进行数千万次进程间交互,本版本改为批量策略交互:
- 交互器只告诉你当前测试点中出现了哪些不同的 ;
- 对于每个 ,你一次性提交一整套操作序列;
- 交互器使用隐藏的初始状态和旋转方案,批量验证该序列;
- 同一个 的策略会用于该测试点内所有对应的数据组。
满分解法不依赖每轮反馈,因此这一改动保留了原题满分部分的核心要求。
交互协议
交互器首先输出一个整数 ,表示当前测试点中出现的不同环长数量。
接下来 行,每行两个整数 :
- 表示环长;
- 表示你为这个 提交的策略最多可以包含多少次操作。
你必须按照交互器给出的顺序,为每个 输出答案。
不可能通关
如果你认为不存在保证通关的策略,输出:
-1
可以通关
如果你认为存在保证通关的策略,先输出一个整数 ,满足 ;随后输出 个整数
其中 。
将 写成恰好 位的二进制数,第 位为 表示本轮翻转第 个位置,为 表示不翻转。位数不足时在高位补零。
这些整数可以分布在任意行中,交互器按空白字符读取。
判定方式
对于每个隐藏数据组,交互器从题目数据中读取:
- 环长 ;
- 操作上限 ;
- 一个不全为 的初始状态。
随后,交互器按照隐藏规则在每轮选择旋转角度,并执行你给出的操作序列。若序列结束后仍未出现所有灯同时亮起,则答案错误。
若你对一个实际可以通关的 输出 -1,或对一个不可能通关的 提交策略,同样答案错误。
样例交互
下面的内容只用于说明输入输出格式。实际评测时,程序与交互器通信。
2
2 4
3 8
3
3 1 3
-1
样例说明
对于 ,操作序列为:
11, 01, 11
无论初始状态是什么、May 如何旋转,都能在不超过 次操作内使两盏灯同时亮起。
对于 ,不存在保证成功的策略,因此输出 -1。
数据范围
对于全部数据:
原始数据共分为 个子任务:
| 子任务 | 隐藏旋转方式 | 是否保证可通关 | 分值 | ||
|---|---|---|---|---|---|
| 1 | 固定/自适应 | 是 | 20 | ||
| 2 | 15 | ||||
| 3 | 随机 | 否 | |||
| 4 | 固定/自适应 | 是 | 10 | ||
| 5 | 随机 | 否 | |||
| 6 | 固定/自适应 | ||||
| 7 | 20 |
重要提示
- 本题在 Hydro 中仍配置为交互题,请勿使用文件输入输出。
- 本版本只有一次批量输出阶段,不需要在每个整数后手动刷新;程序结束前正常输出全部内容即可。
- 交互器按整数读取,行的划分不影响判定。
- 不要试图读取隐藏初始状态;程序只能获得交互器公开的 组 。