传送门
题目大意
给你一个无限长的数轴还有一个大小为n的整数数组 a 0 , a 1 . . . a n − 1 a_0,a_1...a_{n-1} a0,a1...an−1对于数轴上的所有表示整数的点,我们需要将它们同时移动。对于任意一个整数k,k 将会被移动到 k + a k m o d n k+a_{k\ mod\ n} k+ak mod n所在的位置。现在请你判断移动后是否有任意两个整数的位置相同
思路
对0到n-1进行模拟操作,判断是否重合即可
代码
int a[maxn];
map<int,int>mp;
int main(){
int t;
cin>>t;
while(t--){
int n;
mp.clear();
cin>>n;
int tmp;
int flag=1;
for(int i=0;i<n;i++){
scanf("%d",&tmp);
tmp=((tmp%n)+n)%n;
tmp=i+tmp;
if(tmp>=n)tmp-=n;
mp[tmp]++;
if(mp[tmp]>=2)flag=0;
}
if(flag){
puts("YES");
}
else{
puts("NO");
}
}
}