为简化模型,我们不妨假设游戏有N个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另外一个剧情点。此外,游戏还设置了一些存档,在某个剧情点可以将玩家的游戏进度保存在一个档位上,读取存档后可以回到剧情点,重新进行操作或者选择,到达不同的剧情点。
约定:所有操作或选择以及剧情点编号都从1号开始。存档的档位不超过100个,编号也从1开始。游戏默认从1号剧情点开始。总的选项数不超过10
为了追踪硬核游戏玩家哲哲的攻略进度,你打算写一个程序来完成这个工作。假设你已经知道了游戏的全部剧情点和流程,以及哲哲的游戏操作,请你输出哲哲的游戏进度。
输入样例:
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开始存的是1号剧情点;档位2存的是3号剧情点;档位1后来又存了9号剧情点。
1->4->3->7->8->3->5->9->
输出样例:
1
3
9
10
最后一行输出哲哲最后到达的剧情点编号。
输出格式:
0表示哲哲做出了某个操作或选择,后面紧接着一个数字j,表示哲哲在当前剧情点做出了第j个选择。我们保证哲哲的选择永远是合法的。1表示哲哲进行了一次存档,后面紧接着是一个数字j,表示存档放在了第j个档位上。2表示哲哲进行了一次读取存档的操作,后面紧接着是一个数字j,表示读取了放在第j个位置的存档。
接下来的N行,每行对应一个剧情点的发展设定。第i行的第一个数字是Ki,表示剧情点i通过一些操作或选择能去往下面Ki个剧情点;接下来有Ki个数字,第k个数字表示做第k个操作或选择可以去往的剧情点编号。
简单给出样例中经过的剧情点顺序:
对于每个1操作,在一行中输出存档的剧情点编号。
代码长度限制16KBJava时间限制800ms内存限制64MBPython时间限制1000ms内存限制64MB其他编译器时间限制400ms内存限制64MB
#include<bits/stdc++.h>
using namespace std;
int n,m,temp[1100];
vector<int>v[100100];
int main(){
int k,a,p=1;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>k;
for(int j=0;j<k;j++){
cin>>a;
v[i].push_back(a);
}
}
int x,y,now=1;
for(int i=0;i<m;i++){
cin>>x>>y;
if(x==0)
now=v[now][y-1];
else if(x==1){
temp[y]=now;
cout<<now<<endl;
}
else if(x==2)
now=temp[y];
}
cout<<now;
return 0;
}
输入格式:
最后有M行,每行第一个数字是0、1或分别表示:
输入第一行是两个正整数N和M,表示总共有N个剧情点,哲哲有M个游戏操作。
文章为作者独立观点,不代表股票配资公司观点