题意;
给你一个数组 a a a,对于任意的两个 k 1 k_1 k1 和 k 2 k_2 k2,是否存在 k 1 + a [ k 1 k_1+a[k_1%n]!=k_2+a[k_2%n] k1+a[k1
然后推一下就可以发现它和找 ( i + a i ) % n = ( j + a j ) % n (i+a_i)%n=(j+a_j)%n (i+ai)%n=(j+aj)%n 是等价的。然后注意负数取模即可。
AC代码:
const int N = 2e5 + 10;
int a[N];
int n, m;
int x;
int main()
{
int t;
sd(t);
while (t--)
{
sd(n);
rep(i, 0, n - 1)
{
sd(x);
a[i] = ((i + x) % n + n) % n;
}
sort(a, a + n);
bool flag = 1;
rep(i, 1, n - 1)
{
if (a[i] == a[i - 1])
{
flag = 0;
break;
}
}
if (flag)
puts("YES");
else
puts("NO");
}
return 0;
}