week1-[一维数组]传送
week1-[一维数组]传送
题目描述
有 nnn 个传送门,从第 iii 个传送门进去后会被传送到第 aia_iai 个传送门,进而被传送到第 aaia_{a_i}aai 个传送门,如此一直下去……小 A 想知道从第 kkk 个传送门进去后,能不能回到第 kkk 个传送门?
输入格式
输入共 222 行。
第 111 行输入 222 个正整数 n,kn,kn,k。
第 222 行输入 nnn 个正整数 aia_iai。
输出格式
输出共 111 行表示答案。如果可以,输出 GO BACK 2 YOUR RAVE
,否则输出 CHAIN1761BPM170
。
样例 #1
样例输入 #1
5 3
1 3 4 5 2
样例输出 #1
GO BACK 2 YOUR RAVE
提示
样例解释 111
从第 333 个传送门进去后到了第 a3=4a_3 = 4a3=4 个传送门。
从第 444 个传送门进去后到了第 a4=5a_4 = 5a4=5 个传送门。
从第 555 个传送门进去后到了第 a5=2a_5 = 2a5=2 个传送门。
从第 222 个传送门进去后到了第 a2=3a_2 = 3a2=3 个传送门,成功回来了。
数据范围
对于所有数据,1≤n≤1001\leq n\leq 1001≤n≤100,1≤ai≤n1 \leq a_i \leq n1≤ai≤n。
📄 C++ 代码实现:
#include <iostream>
using namespace std;int main() {int n, k;cin >> n >> k;int a[101]; // 下标从1到nfor(int i = 1; i <= n; i++) {cin >> a[i];}bool visited[101] = {false};int current = k;while(true) {if(current == k && visited[k]) { // 回到起点且至少走过一次cout << "GO BACK 2 YOUR RAVE" << endl;break;}if(visited[current]) { // 进入了其他循环cout << "CHAIN1761BPM170" << endl;break;}visited[current] = true;current = a[current];}return 0;
}