Hãy chơi một trò chơi một người chơi gọi là nhảy mảng . Để chơi, bạn chỉ cần một mảng các số nguyên, nói a
. Bạn bắt đầu ở một vị trí nào đó i
, và trên mỗi lượt, bạn nhảy sang một vị trí mới. Lần lượt n
,
- nếu
n
là chẵn, bạn nhảy đến vị trí tuyệt đốia[i] mod length(a)
, - nếu
n
là số lẻ, bạn nhảy đến vị trí tương đối(i + a[i]) mod length(a)
.
Việc lập chỉ mục mảng bắt đầu từ 0. Bạn có thể tính bước nhảy đầu tiên là lượt 0
hoặc lượt 1
, điều này mang lại một trò chơi khác. Vì không gian trạng thái của trò chơi là hữu hạn (di chuyển của bạn được xác định bởi vị trí của bạn và tính chẵn lẻ của số lần lượt), nên cuối cùng bạn sẽ nhập một vòng có độ dài chẵn. Biểu thị theo loop(a, i, b)
độ dài của vòng lặp này, khi bước nhảy đầu tiên được tính là lượt b
.
Đầu vào
Một mảng không nhiều a
số nguyên để chơi trò chơi.
Đầu ra
Số lượng tối đa p
sao cho, khi bắt đầu ở một số vị trí i
và đếm lượt đầu tiên là 0
hoặc 1
, cuối cùng bạn sẽ nhập một vòng có độ dài 2 * p
. Nói cách khác, đầu ra của bạn là số
max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] }
Quy tắc
Bạn có thể cung cấp một chức năng hoặc một chương trình đầy đủ. Số byte nhỏ nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Các trường hợp thử nghiệm
[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
được định nghĩa là luôn luôn dương ( -1 mod 5 == 4
) không giống như trong C. Có phải vậy không?
mod
, luôn mang lại kết quả không âm.