2021年天梯赛LV2的最后一道题
题目的理解尤为关键
#include<bits/stdc++.h>
using namespace std;
int n,m;
int book[101010];
vector<int>a[1010100];
int main()
{
int i,j,k,x,y;
cin>>n>>m;
//保证从1开始记录,提前向数组中存入一个数
for(i=1;i<=n;i++)
{
a[i].push_back(0);
}
for(i=1;i<=n;i++)
{
cin>>k;
for(j=0;j<k;j++)
{
cin>>x;
a[i].push_back(x);
}
}
//k表示当前所在位置,由题意得开始位置是1
k=1;
while(m--)
{
scanf("%d%d",&x,&y);
if(x==0)
{
//当前剧情点(k)做出了第 j (y)个选择
k=a[k][y];
}
if(x==1)
{
//存档放在了第 j 个档位上
book[y]=k;
printf("%d\n",k); //在一行中输出存档的剧情点编号
}
if(x==2)
{
//读取了放在第 j 个位置的存档
k=book[y];
}
}
cout<<k; //最终位置
}
题目简介
输入:N个剧情点,有M个游戏操作
接下来N行,每行第一个数字是Ki,表示剧情点i通过一些操作能去往下面Ki个剧情点,接下来有Ki个数字
最后M行,每行第一个数字是0 1或者2分别表示
0:后面紧接着一个数字j,表示在当前剧情点做出了第j个选择
1:表示存档,j表示存档放在了第j个档位上
2:读取存档,读取了放在第j个位置的存档
输出:对于每个存档操作,在一行中输出存档的剧情点编号
最后一行输出哲哲最后到达的剧情点编号
题目理解:
前N行的输入,表示行走的路线,类似于迷宫的初始化
最后M行的输入:
有两个疑问点
1. 题意理解
0、1 、2分别代表什么意思
- 0 表示哲哲做出了某个操作或选择,后面紧接着一个数字 j,表示哲哲在当前剧情点做出了第 j 个选择。我们保证哲哲的选择永远是合法的。
- 1 表示哲哲进行了一次存档,后面紧接着是一个数字 j,表示存档放在了第 j 个档位上。
- 2 表示哲哲进行了一次读取存档的操作,后面紧接着是一个数字 j,表示读取了放在第 j 个位置的存档。
再仔细审题:都从1号开始;进行M个游戏操作;存档:在某个剧情点可以将玩家的游戏进度保存在一个档位上,读取存档后可以回到剧情点,重新进行操作或者选择,到达不同的剧情点
2.dfs还是bfs,存档的剧情点编号,和最后到达的剧情点编号