Codeforces Round #639 (Div. 2) C. Hilbert's Hotel

C. Hilbert’s Hotel
题意
有n个数,现在要求把每个数移动到(a[i]+i)%n的位置,看是不是每个位置都只有一个数。
思路
直接暴力每个数改变后的位置塞进map里,看是不是存在某个位置的个数≥2即可。

#include
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;
}

你可能感兴趣的:(cf,stl)