CF556B Case of Fake Numbers

题目描述

著名侦探 Andrewid the Android 正在调查一个案子,这个案子涉及骗子们制造出假冒著名 Stolp 齿轮的仿制品,这些齿轮谜题就像曾经著名的魔方一样具有盛名。 这个谜题的核心部件包括一个按钮和一排 $n$ 个相同的齿轮。每个齿轮上有 $n$ 个齿,这些齿上依次按逆时针顺序写着 $0$ 到 $n-1$ 的所有数字。当你按下按钮时,第一个齿轮顺时针旋转,第二个齿轮逆时针旋转,第三个齿轮再顺时针旋转,如此交替。 此外,每个齿轮上有且只有一个“激活齿”。当齿轮转动时,新的激活齿会变成当前激活齿在旋转方向上的下一个位置。例如,如果 $n=5$,且当前激活齿是写着数字 $0$ 的那个齿,那么顺时针旋转后,写着数字 $1$ 的齿变为激活齿,而逆时针旋转后,写着数字 $4$ 的齿变为激活齿。 Andrewid 记得真正的谜题有这样一个性质:你可以多次按按钮,使得最后各个齿轮上的激活齿依次组成 $0,1,2,\ldots,n-1$ 的序列。请编写程序判断给定的齿轮谜题是真是假。

输入格式

第一行包含整数 $n$($1 \leq n \leq 1000$),表示齿轮的数量。 第二行包含 $n$ 个数字 $a_1,a_2,\ldots,a_n$($0 \leq a_i \leq n-1$),表示每个齿轮当前激活齿上的数字。

输出格式

一行输出 "Yes"(不含引号),如果该 Stolp 齿轮谜题是真的;否则输出 "No"。

说明/提示

在第一个样例中,第一次按按钮后,激活齿序列将变为 2 2 1,再按一次后变为 0 1 2。 由 ChatGPT 5 翻译