C. Hilbert’s Hotel
题意:
有n个数,现在要求把每个数移动到(a[i]+i)%n的位置,看是不是每个位置都只有一个数。
思路:
直接暴力每个数改变后的位置塞进map里,看是不是存在某个位置的个数≥2即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int n;cin>>n;
map<int,int> mp;
int flag=0;
for(int i=0;i<n;i++){
int x;cin>>x;
x=((x+i)%n+n)%n;
mp[x]++;
if(mp[x]>=2) flag=1;
}
puts(flag?"NO":"YES");
}
return 0;
}