#P14898. [OOI2017预选赛long]Включи свет, закрой двери!开灯,关门!
[OOI2017预选赛long]Включи свет, закрой двери!开灯,关门!
原题是交互题。为了适配 Hydro OJ 的普通评测,本版本改为:直接给出迷宫的完整图结构,选手需要输出一组合法操作序列。评测器会模拟执行你的操作,只要最终满足要求即可通过。
本题需要使用 Special Judge。
题目描述
在城市 中有一个流行的新密室逃脱游戏。玩家需要逃出一个由若干房间组成的迷宫。每个房间中都有:
- 若干扇门;
- 一盏灯;
- 两个开关。
第一个开关可以打开或关闭当前房间的灯,使用次数不限。
第二个开关只能在离开当前房间时使用一次:当玩家从当前房间通过某扇门离开后,当前房间的所有门会立即被锁住,之后该房间将不能再进入。
初始时所有房间都是未锁住的,部分房间的灯已经亮着。你的目标是:
- 使所有房间的灯都处于打开状态;
- 锁住除当前所在房间以外的所有房间。
你可以输出一系列操作,评测器会按照规则模拟执行。操作次数不能超过 次,最后必须输出 done。
输入格式
第一行包含两个整数 ,表示房间数量和门的数量。
第二行包含 个整数 。若 ,表示第 个房间初始灯亮;若 ,表示第 个房间初始灯灭。
接下来 行,每行包含两个整数 ,表示房间 与房间 之间有一扇门。
最后一行包含一个整数 ,表示玩家初始所在的房间编号。
门的编号规则如下:对于每个房间,按照输入边出现的顺序,依次给与该房间相邻的门编号为 。例如,如果输入边依次为 (1,2)、(1,3),那么在房间 中,通向房间 的门编号为 ,通向房间 的门编号为 。
输出格式
输出若干行操作,每行一个操作。允许的操作如下:
turn on:打开当前房间的灯。如果当前房间的灯已经打开,则不发生变化。turn off:关闭当前房间的灯。如果当前房间的灯已经关闭,则不发生变化。go edgeId keep:尝试从当前房间通过编号为edgeId的门移动到相邻房间,并保持当前房间未锁住。go edgeId lock:尝试从当前房间通过编号为edgeId的门移动到相邻房间;如果移动成功,则离开后锁住当前房间。done:结束操作序列。
如果 go 操作试图进入一个已经锁住的房间,则移动失败,玩家仍留在当前房间,并且当前房间不会因为本次操作被锁住。
你的输出必须满足:
- 操作总数不超过 ,其中
done也计为一次操作; - 所有
go操作中的门编号必须在当前房间中存在; - 执行到
done时,所有房间的灯都必须打开; - 执行到
done时,除当前所在房间外,其余所有房间都必须已经被锁住。
如果存在多种合法操作序列,输出任意一种即可。
数据范围
- ;
- ;
- ;
- 图为无向连通图;
- 不存在自环;
- 任意两个房间之间至多有一条门直接相连。
样例 1
输入
2 1
0 0
1 2
1
输出
turn on
go 1 keep
turn on
go 1 lock
done
样例 2
输入
3 2
1 1 1
1 2
2 3
2
输出
turn on
go 1 keep
turn on
go 1 lock
go 2 keep
turn on
go 1 lock
done
样例 3
输入
3 3
0 1 1
1 2
2 3
3 1
1
输出
turn on
go 1 keep
turn on
go 2 keep
turn on
go 1 lock
go 1 lock
done
样例解释
以上样例输出仅为一种合法方案。由于本题使用 Special Judge,只要你的操作序列满足要求,即使与样例输出不同,也会被判为正确。
子任务
| 子任务 | 测试点 | 分值 | 限制 |
|---|---|---|---|
| 0 | 1--3 | 0 | 样例测试 |
| 1 | 4--19 | 30 | 图是一棵树 |
| 2 | 20--29 | 图是一个环 | |
| 3 | 30--46 | 40 | 无额外限制 |