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

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

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

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

接下来的 N 行,每行对应一个剧情点的发展设定。第 i 行的第一个数字是 K
i

,表示剧情点 i 通过一些操作或选择能去往下面 K
i

个剧情点;接下来有 K
i

个数字,第 k 个数字表示做第 k 个操作或选择可以去往的剧情点编号。

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

0 表示哲哲做出了某个操作或选择,后面紧接着一个数字 j,表示哲哲在当前剧情点做出了第 j 个选择。我们保证哲哲的选择永远是合法的。
1 表示哲哲进行了一次存档,后面紧接着是一个数字 j,表示存档放在了第 j 个档位上。
2 表示哲哲进行了一次读取存档的操作,后面紧接着是一个数字 j,表示读取了放在第 j 个位置的存档。
约定:所有操作或选择以及剧情点编号都从 1 号开始。存档的档位不超过 100 个,编号也从 1 开始。游戏默认从 1 号剧情点开始。总的选项数(即 ∑K
i

)不超过 10
6

输出格式:
对于每个 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 号剧情点。

如果你是因为没有看懂题来搜的题解,希望这篇博客能够帮助你,花了一个简图
1 号剧情点,通过 1 号操作到达剧情点 2,通过 2 号操作到达剧情点 3,题中 (0, 3)的意思就是,目前在 1 号剧情点,通过 操作 3,进入剧情点 4。

这里要读懂题目

我一开始想的是邻接表存储,xuan[x][i] 指的就是在 x 点通过 i 操作到达的位置,这样,设置一个变量 now, 表示当前所在的位置,定义一个存档 dang 数组,存放第 i 个档位的剧情点编号

第一版,临界表(不是满分,内存过大),不过可以参考思路,先看题解:

#include<iostream>
#include<string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<deque>
#include<cctype>
#include<unordered_set>
#include<unordered_map>
#include<fstream>
#include<cstring>
using namespace std;
const int MAXN = 22222;
int dang[101];
int xuan[MAXN][MAXN];
int N, M;
int now = 1;
int main() {cin >> N >> M;for (int i = 1; i <= N; i++) {int k;cin >> k;for (int j = 1; j <= k; j++) {int x;cin >> x;// 输入 x 表示可以到达的剧情点,xuan[i][j] 表示 i 号剧情点通过 j 号操作到达的位置 xxuan[i][j] = x;}}for (int i = 1; i <= M; i++) {int x, j;cin >> x >> j;if (x == 0) {//  如果 x 等于 0,更新现在位置,就是现在的位置走了 j 号操作now = xuan[now][j];} else if (x == 1) {// 存档,j 号档位存储 now 位置dang[j] = now;cout << now << endl;} else if (x == 2) {//  读到 now 跳到 档now = dang[j];}}cout << now; return 0;
}

第一种临界矩阵的方法只能拿18 分,原因很简单,二维数组内存太大了,定义不了,那如果二维数组不行,使用临界表行吗?

第二版,使用邻接表,满分

看了代码会发现,为什么与 总左边没关系了呢,为什么刚开始要进行初始化?
这一步的目的是什么呢?

for (int i = 1; i<= N; i++) {xuan[i].push_back(0);}

我们知道,二维数组都是 从 0 开始的,但是题目中,所有的都是从 1 开始,如果我们将每一个二维数组的初始都加上 0,那么下标就等于操作号 j 了,举个例子

xuan[i].push_back(x) // 意思是 剧情点 i,能够到达 x 剧情,如果已经初始化,那么 x 就是 x[i][j] j 从 1 开始,也就是说,我们不需要管 j 操作,因为在临界表的顺序就是正确的,见图:


可见,初始就是让纵坐标与 j 操作相同

#include<iostream>
#include<string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<deque>
#include<cctype>
#include<unordered_set>
#include<unordered_map>
#include<fstream>
#include<cstring>
using namespace std;
const int MAXN = 100001;
int dang[MAXN];
vector<int>xuan[MAXN];
int N, M;
int now = 1;
int main() {cin >> N >> M;for (int i = 1; i<= N; i++) {xuan[i].push_back(0);}for (int i = 1; i <= N; i++) {int k;cin >> k;for (int j = 1; j <= k; j++) {int x;cin >> x;xuan[i].push_back(x);}}for (int i = 1; i <= M; i++) {int x, j;cin >> x >> j;if (x == 0) {now = xuan[now][j];} else if (x == 1) {dang[j] = now;cout << now << endl;} else if (x == 2) {now = dang[j];}}cout << now; return 0;
}

L2-040 哲哲打游戏 (25 分)(分析题目意思,读懂题)相关推荐

  1. L2-4 哲哲打游戏 (25 分)

    L2-4 哲哲打游戏 (25 分) 哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N  ...

  2. 哲哲打游戏 (25 分)

    7-12 哲哲打游戏 (25 分) 哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N  ...

  3. 7-6 哲哲打游戏 (25 分)

    7-6 哲哲打游戏 (25 分) 哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个 ...

  4. PTA_2021年团体程序设计天梯赛_总决赛_L2-4 哲哲打游戏 (25 分)_搞心态_简单模拟

    // 输出格式: 对于每个 1(即存档)操作,在一行中输出存档的剧情点编号.最后一行输出哲哲最后到达的剧情点编号.输入样例: 10 11 3 2 3 4 1 6 3 4 7 5 1 3 1 9 2 3 ...

  5. 25张图让你读懂神经网络构架

    [独家]25张图让你读懂神经网络架构 2017-05-21 22:32 由于新的神经网络架构无时无刻不在涌现,想要记录所有的神经网络是很困难的事情.要把所有这些缩略语指代的网络(DCIGN,IiLST ...

  6. L2-040 哲哲打游戏 (25 分)2021天梯赛c++

    哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择 ...

  7. L2-040 哲哲打游戏 (25 分)-PAT 团体程序设计天梯赛 GPLT

    哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择 ...

  8. L2-4 哲哲打游戏 (25 分)_模拟

    哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择 ...

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

    哲哲是一位硬核游戏玩家.最近一款名叫<达诺达诺>的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择 ...

最新文章

  1. 第十一周项目实践3 DFS(深度优先搜索)的基本模板
  2. homestead开发php,介绍ThinkPHP开发环境之Homestead
  3. 试试这个Excel知识测验,得分超过80分算你赢
  4. Beta版本测试报告
  5. qt5.9.0调试如何查看变量的值_深入了解 Java 调试
  6. 《scikit-learn》《Kaggle》泰坦尼克数据集的试验
  7. 一个普通类就能干趴你的springboot,你信吗?
  8. spring各个jar包作用
  9. nodejs文件的读取
  10. 别让自己成为一名废弃的程序员
  11. 应用程序热补丁(二):自动生成热补丁
  12. 面向对象闲话(一)——什么是对象
  13. B4A 调用 饺子播放器 JiaoZiVideoPlayer
  14. amd cpu排行_2019 CPU天梯图(intel和AMD CPU性能排行)
  15. scroll案例:带有动画的返回顶部
  16. python pandas向已有excel添加新表sheet/添加数据
  17. 字节架构师:来说说 Kafka 的消费者客户端详解,你都搞懂了吗?
  18. 计算共形几何讲座笔记
  19. 使用Bundle校验接口入参
  20. 悟空浏览器——青龙羊毛

热门文章

  1. 遭到强烈反对后,Apple推迟了扫描设备以查找虐待儿童图像的计划
  2. Mybatis配置驼峰影射作用
  3. 中马“两国双园”成中企投资东盟国际产能重要平台
  4. 假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比
  5. 刘强东不学编程,今天很可能没有京东......一位码农的发家致富史
  6. 用了VS2022,你可能再也回不去旧版!
  7. MISC 部分入门套路和心得
  8. MYSQL 倒库操作
  9. Object.assign是什么意思啊?
  10. ipados 蓝牙 android,iPadOS13.4如何连接蓝牙鼠标 iPadOS13.4蓝牙鼠标连接使用教程