让我们玩一个名为“ 跳数组”的单人游戏。要播放,您只需要一个整数数组,例如a
。您从某个位置开始i
,然后在每个转弯处都跳到一个新位置。反过来n
,
- 如果
n
是偶数,则跳至绝对位置a[i] mod length(a)
, - 如果
n
是奇数,则跳到相对位置(i + a[i]) mod length(a)
。
数组索引从零开始。您可以将第一个跳跃算作turn 0
或turn 1
,这会带来不同的游戏。由于游戏的状态空间是有限的(您的举动取决于您的位置和回合数的奇偶性),因此您最终将进入一个长度均匀的循环。loop(a, i, b)
当第一个跳转被计为turn时,由该循环的长度表示b
。
输入项
一个非空a
整数数组,用于玩游戏。
输出量
这样的最大数量p
,当从某个位置开始i
并将第一圈计算为0
或时1
,您最终会进入一个长度循环2 * p
。换句话说,您的输出是数字
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
规则
您可以提供功能或完整程序。最小的字节数获胜,并且不允许出现标准漏洞。
测试用例
[0] -> 1
[-213] -> 1
[1,3,12,-1,7] -> 1
[2,3,5,7,9,11,13,17,19] -> 2
[-2,3,-5,7,-9,11,-13,17,-19,23,-27] -> 3
[0,2,5,4,-9,0,-1,1,-1,1,-6] -> 4
mod
其定义为始终为正(-1 mod 5 == 4
)。是这种情况吗?
mod
,它总是给出非负结果。