#G3008. 跳格子

    ID: 1045 传统题 1000ms 512MiB 尝试: 9 已通过: 4 难度: 普及− 上传者: 标签>GESP三级一维数组模拟2026模拟

跳格子

题目描述

地上画着一排 nn 个格子,从左到右编号为 1∼n1 \sim n。第 ii 个格子里写着一个不为 00 的整数 aia_i。

小 F 从第 ss 个格子出发,按下面的规则不停地跳:

  • 站在第 ii 个格子上时,下一跳跳到第 i+aii + a_i 个格子(aia_i 为正数就往右跳,为负数就往左跳);
  • 如果跳到的位置小于 11 或大于 nn,就跳出了格子,游戏结束。

小 F 很快发现,有时候游戏永远不会结束:只要他又一次站到了之前站过的格子上,后面就会一遍又一遍地重复同一段路线。

请你判断游戏会怎样进行:

  • 如果小 F 最终跳出了格子,输出 OUT 和一个整数 kk,表示他一共跳了 kk 次(包括跳出去的那一次);
  • 否则,设小 F 在第 tt 跳时第一次站到了一个之前站过的格子上(出发时站的格子 ss 也算站过),而这个格子上一次是在第 t′t' 跳之后站上的(出发时算第 00 跳),输出 LOOP、tt 和 t−t′t - t',其中 t−t′t - t' 就是之后每循环一圈需要跳的次数。

输入格式

第一行两个整数 n,sn, s,分别表示格子的个数和出发的格子编号。

第二行 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n。

输出格式

一行。若跳出格子,输出 OUT k;若陷入循环,输出 LOOP t L,其中 L=t−t′L = t - t'。

样例 #1

样例输入 #1

6 1
2 3 -1 -2 4 1

样例输出 #1

OUT 4

样例解释

路线是 1→3→2→5→91 \to 3 \to 2 \to 5 \to 9。第 44 跳跳到了第 99 个格子,超出了 n=6n = 6,跳出格子。

样例 #2

样例输入 #2

7 1
1 2 1 2 1 -3 5

样例输出 #2

LOOP 5 3

样例解释

路线是 1→2→4→6→3→4→…1 \to 2 \to 4 \to 6 \to 3 \to 4 \to \dots

第几跳之后 00 11 22 33 44 55
站在第几格 11 22 44 66 33 44

第 55 跳时第一次站回了之前站过的格子 44,它上一次是第 22 跳之后站上的,所以 t=5t = 5,L=5−2=3L = 5 - 2 = 3:之后会沿着 4→6→3→44 \to 6 \to 3 \to 4 永远循环,每圈跳 33 次。

提示

数据范围

  • 对于 30%30\% 的数据:保证小 F 最终会跳出格子,n≤1000n \le 1000;
  • 对于 60%60\% 的数据:n≤1000n \le 1000;
  • 对于 100%100\% 的数据:1≤s≤n≤1051 \le s \le n \le 10^5,1≤∣ai∣≤n1 \le |a_i| \le n。

提示

  • 可以再开一个数组,记下每个格子是第几跳之后第一次站上的;还没站过的格子记成 −1-1。
  • 小 F 每跳一次,要么跳出格子,要么站上一个新格子,要么站上一个旧格子。新格子最多只有 nn 个,所以最多跳 n+1n + 1 次一定会有结果。