CF1344A Hilbert's Hotel
题目描述
Hilbert 酒店是一家非常特殊的酒店,因为它的房间数量是无限的!事实上,每一个整数(包括零和负整数)都有一个房间。更奇怪的是,这家酒店目前已经满员,也就是说每个房间里正好有一位客人。酒店经理 David Hilbert 决定要重新安排客人,因为他认为这样可以创造出一个空房间(即没有客人的房间)。
对于任意整数 $k$ 和正整数 $n$,$k\bmod n$ 表示 $k$ 除以 $n$ 的余数。更正式地说,$r=k\bmod n$ 是满足 $k-r$ 能被 $n$ 整除的最小非负整数。总有 $0\leq k\bmod n\leq n-1$。例如,$100\bmod 12=4$,$(-1337)\bmod 3=1$。
重新安排的方式如下:有一个长度为 $n$ 的整数数组 $a_0,a_1,\ldots,a_{n-1}$。对于每个整数 $k$,第 $k$ 号房间的客人会被移动到编号为 $k+a_{k\bmod n}$ 的房间。
在这个重新安排过程之后,判断是否每个房间仍然正好有一位客人。也就是说,没有空房间,也没有房间有多位客人。
输入格式
每组测试包含多个测试用例。第一行包含一个整数 $t$($1\leq t\leq 10^4$)——表示测试用例的数量。接下来的 $2t$ 行描述每个测试用例。
每个测试用例的第一行包含一个整数 $n$($1\leq n\leq 2\cdot 10^5$)——数组的长度。
每个测试用例的第二行包含 $n$ 个整数 $a_0,a_1,\ldots,a_{n-1}$($-10^9\leq a_i\leq 10^9$)。
保证所有测试用例中 $n$ 的总和不超过 $2\cdot 10^5$。
输出格式
对于每个测试用例,输出一行,如果重新安排后每个房间正好有一位客人,则输出 "YES";否则输出 "NO"。你可以用任意大小写输出答案。
说明/提示
在第一个测试用例中,每位客人都向右移动了 $14$ 个房间,因此分配仍然是唯一的。
在第二个测试用例中,偶数号客人向右移动 $1$ 个房间,奇数号客人向左移动 $1$ 个房间。可以证明分配仍然是唯一的。
在第三个测试用例中,每隔四位的客人向右移动 $1$ 个房间,其余客人向右移动 $5$ 个房间。可以证明分配仍然是唯一的。
在第四个测试用例中,$0$ 号和 $1$ 号客人都被分配到了 $3$ 号房间。
在第五个测试用例中,$1$ 号和 $2$ 号客人都被分配到了 $2$ 号房间。
由 ChatGPT 4.1 翻译