天梯赛--L2-040 哲哲打游戏 (25 分)(vector)

本文介绍了一名硬核玩家哲哲在新游《达诺达诺》中的攻略过程,通过程序追踪他的剧情点进展,包括存档和操作记录。使用C++代码实现,关注剧情点流转和存档管理。

L2-040 哲哲打游戏 (25 分)

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切!

为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另外一个剧情点。此外,游戏还设置了一些存档,在某个剧情点可以将玩家的游戏进度保存在一个档位上,读取存档后可以回到剧情点,重新进行操作或者选择,到达不同的剧情点。

为了追踪硬核游戏玩家哲哲的攻略进度,你打算写一个程序来完成这个工作。假设你已经知道了游戏的全部剧情点和流程,以及哲哲的游戏操作,请你输出哲哲的游戏进度。

输入格式:

输入第一行是两个正整数 N 和 M (1≤N,M≤105),表示总共有 N 个剧情点,哲哲有 M 个游戏操作。

接下来的 N 行,每行对应一个剧情点的发展设定。第 i 行的第一个数字是 Ki​,表示剧情点 i 通过一些操作或选择能去往下面 Ki​ 个剧情点;接下来有 Ki​ 个数字,第 k 个数字表示做第 k 个操作或选择可以去往的剧情点编号。

最后有 M 行,每行第一个数字是 0、1 或 2,分别表示:

  • 0 表示哲哲做出了某个操作或选择,后面紧接着一个数字 j,表示哲哲在当前剧情点做出了第 j 个选择。我们保证哲哲的选择永远是合法的。
  • 1 表示哲哲进行了一次存档,后面紧接着是一个数字 j,表示存档放在了第 j 个档位上。
  • 2 表示哲哲进行了一次读取存档的操作,后面紧接着是一个数字 j,表示读取了放在第 j 个位置的存档。
以下是基于提供的引用内容和专业知识编写的 L2-040 哲哲打游戏的 Python 解决方案: ### 题目解析 题目描述了一个模拟过程,其中需要追踪玩家哲哲在游戏中触发的不同剧情点及其状态变化。通过输入数据构建一个图结构,并按照特定的操作指令更新当前的状态。 --- ### Python 实现代码 ```python import sys # 输入处理部 n, m = map(int, input().split()) # n 表示节点数,m 表示操作次数 a = [[] for _ in range(n + 1)] # 构建邻接表存储节点关系 book = {} # 记录标记位置的历史记录 for i in range(1, n + 1): # 初始化每个节点的第一个元素为0 a[i].append(0) for i in range(1, n + 1): # 处理后续连接关系 data = list(map(int, input().split())) for x in data[1:]: a[i].append(x) k = 1 # 初始起点设置为1号节点 # 操作执行部 for i in range(m): operation, param = map(int, input().split()) if operation == 0: # 跳转到指定索引对应的下一个节点 k = a[k][param] elif operation == 1: # 标记当前位置并跳转至目标节点 book[param] = k # 将参数作为键保存当前节点 k = a[k][param] elif operation == 2: # 返回历史标记的位置 k = book[param] # 使用书签恢复之前的位置 print(k) # 输出当前所在节点编号 ``` --- ### 代码逻辑说明 1. **初始化阶段**: - `n` 和 `m` 别表示节点数量和操作次数。 - 创建二维列表 `a` 来存储每个节点的邻居信息[^4]。 - 字典 `book` 用于记录中间状态以便回溯。 2. **读取节点关系**: - 对于每一个节点,先将其第一个元素设为默认值 `0`。 - 接着依次读入该节点与其他节点的关系,并填充到 `a` 中。 3. **操作处理**: - 当前指针初始指向第 1 号节点。 - 根据不同的操作类型 (`operation`) 执行相应的动作: - 如果是 `0` 类型,则直接跳转到对应索引的目标节点。 - 如果是 `1` 类型,则将当前节点存入字典 `book` 并继续跳转。 - 如果是 `2` 类型,则从字典中取出之前的标记位置并返回。 4. **输出结果**: - 每次操作完成后打印当前所在的节点编号。 --- ### 注意事项 - 确保输入的数据格式正确无误,尤其是隔符和换行符的处理。 - 在实际运行时可以使用标准输入流替代文件读取方式以适应不同环境需求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值