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

为简化模型,我们不妨假设游戏有 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 个位置的存档。

约定:所有操作或选择以及剧情点编号都从 1 号开始。存档的档位不超过 100 个,编号也从 1 开始。游戏默认从 1 号剧情点开始。总的选项数(即 ∑Ki​)不超过 106。

输出格式:

对于每个 1(即存档)操作,在一行中输出存档的剧情点编号。

最后一行输出哲哲最后到达的剧情点编号。

输入样例:

10 11
3 2 3 4
1 6
3 4 7 5
1 3
1 9
2 3 5
3 1 8 5
1 9
2 8 10
0
1 1
0 3
0 1
1 2
0 2
0 2
2 2
0 3
0 1
1 1
0 2

输出样例:

1
3
9
10

样例解释:

简单给出样例中经过的剧情点顺序:

1 -> 4 -> 3 -> 7 -> 8 -> 3 -> 5 -> 9 -> 10。

档位 1 开始存的是 1 号剧情点;档位 2 存的是 3 号剧情点;档位 1 后来又存了 9 号剧情点。

看不懂的错误:

这题我刚开始在做的时候,将存档和经过的剧情点都用了vector来存储,在提交时发现报了莫名其妙的段错误:

部分错误代码示例:

#include <iostream>
#include <vector>
using namespace std;const int N = 100000;  //剧情点数和操作数的最大值
vector<int> v[N + 1];
vector<int> ans, archive;  //结果和存档int main() {int n, m;  //n个剧情点,m个操作cin >> n >> m;for (int i = 1; i <= n; i++) {int k;  //可去往的剧情点数cin >> k;while (k--) {int x;cin >> x;v[i].push_back(x);}}ans.push_back(1);for (int i = 0; i < m; i++) {int c, j;cin >> c >> j;if (c == 0) {ans.push_back(v[ans.back()][j - 1]);} else if (c == 1) {archive.push_back(ans.back());} else {ans.push_back(archive[j - 1]);}}for (auto i : archive) {cout << i << endl;}cout << ans.back() << endl;return 0;
}

检查不出原因,寻思可能是vector的问题,于是我直接把存档的vector换成了普通数组,经过的剧情点直接不予存储,只记录当前的剧情点,更改完后果然全部都正确了,可恶!

正确代码示例:

#include <iostream>
#include <vector>
using namespace std;const int N = 100000;  //剧情点数和操作数的最大值
vector<int> v[N + 1];  //存放剧情点发展
int archive[101];      //存档
int cur = 1;           //当前剧情点int main() {int n, m;  //n个剧情点,m个操作cin >> n >> m;for (int i = 1; i <= n; i++) {int k;  //可去往的剧情点数cin >> k;while (k--) {int x;cin >> x;v[i].push_back(x);}}while (m--) {int c, j;cin >> c >> j;if (c == 0) {cur = v[cur][j - 1];  //当前剧情点更新} else if (c == 1) {archive[j] = cur;  //存档cout << archive[j] << endl; } else {cur = archive[j];  //读取存档}}cout << cur << endl;return 0;
}

团体程序设计天梯赛-练习集-L2-040 哲哲打游戏 (25 分)相关推荐

  1. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...

  2. 团体程序设计天梯赛 -- 练习集 (L2合集)

    文章目录 L2-001 紧急救援 (25 分) L2-002 链表去重 (25 分) L2-003 月饼 (25 分) L2-004 这是二叉搜索树吗? (25 分) L2-005 集合相似度 (25 ...

  3. 团体程序设计天梯赛-练习集 L2 阶段全部题解

    L2-001. 紧急救援 地址链接:https://blog.csdn.net/dengkuomin/article/details/64498691 L2-002. 链表去重 地址链接:https: ...

  4. 团体程序设计天梯赛练习集题解整合

    网上介绍 团体程序设计天梯赛练习集 的文章已经很多了, 我的这篇文章是对练习集题解的整合,方便每一位备战 团体程序设计天梯赛 的同学使用. 一年一度的 团体程序设计天梯赛 即将开始,PTA的练习集是必 ...

  5. 团体程序设计天梯赛-练习集 L1-033——L1-048

    团体程序设计天梯赛-练习集 /** @Description: 出生年* @version: * @Author: * @Date: 2021-03-25 08:13:57* @LastEditors ...

  6. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L3 答案 顶着满课,整整一星期,终于咕完了.(:´д`)ゞ 知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几 ...

  7. PTA团体程序设计天梯赛-练习集(3)

    PTA团体程序设计天梯赛-练习集 L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句"Hello World!"就可以 ...

  8. PTA团体程序设计天梯赛-练习集

    PTA团体程序设计天梯赛-练习集 L1-024 后天 L1-025 正整数A+B L1-026 I Love GPLT L1-027 出租 L1-029 是不是太胖了 L1-030 一帮一 L1-03 ...

  9. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L1 答案

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L1 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 标号 标题 分数 通过数 提交数 通过率 L1-001 Hello World 5 46779 1 ...

  10. PTA团体程序设计天梯赛-练习集Level-1(参考代码C语言/Python版)

    本题目集截止到2022年天梯赛 受个人水平限制,<PTA团体程序设计天梯赛-练习集>中暂时只能把Level-1的题目做出来(也许有些Level-2的题可以写出来?)-我不是专门搞竞赛的,参 ...

最新文章

  1. 洛谷P4768 [NOI2018]归程(Kruskal重构树)
  2. BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏)
  3. 简约好看的域名售卖页html源码
  4. 不再是顶配专属iPhone 13系列将全系标配LiDAR激光雷达
  5. android 仿美团悬浮,类似美团悬浮框的效果
  6. Linux命令收藏-进程管理
  7. android 动态单选,添加单选按钮动态︰android
  8. 评论.gitignore?
  9. GigaSpaces Grid for dataBase Cashing
  10. 最受欢迎Java数据库访问框架大比拼,你独爱哪一款?
  11. ENVI-IDL基础学习(1)
  12. MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式 参考文档:《基于串行和并行ADMM算法的电_气能量流分布式协同优化_瞿小斌》
  13. 对比rank, dense_rank, row_number
  14. 序章:企业潜规则认知
  15. 4、Unity商店,导入资源
  16. K210 Draco AI环境的搭建(1)
  17. 《计算机网络教程》(微课版 第五版)第七章 网络安全 课后习题及答案
  18. 散点数据的包络线获取(MATLAB)
  19. POJ 3373 模运算 + 折半枚举
  20. [iPad]手势及分页

热门文章

  1. 机器人受人类虐待后奋起反击?这段视频刷爆网络
  2. 输出一个平面点的对称点
  3. pptv首页导航效果
  4. uniapp苹果端IOS日期类型显示NAN
  5. 基于图像的虚拟试衣:Image Based Virtual Try-On Network from Unpaired Data
  6. 解决高并发项目下的热点问题
  7. 苹果ipad邮箱找不到服务器,iPad收发邮件配置教程
  8. 运算符(operator)
  9. 最快最好用的数据增强库「albumentations」 一文看懂用法
  10. 学习Unity3D(1)之GUI游戏界面