codeforces 639 div2——C

题目

对于这些题的做法,我们先把无穷的空间映射为一个可数的集合。我们可以知道的是,对于处于第i个位置的客人(i为任意整数),i+ki(k也为任意整数)的客人也会映射到同一个空间,手动模拟一下就可以发现了。为了方便处理,只要把他们映射到0~n-1的位置就可以了。由于每个房间只有一个人,所以一旦出现一间房两个人,必定会满足大于一人和空房的条件。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<stack>
#include<utility>
#define int long long
using namespace std;
int t,n,a[200005],mp[200005];
signed main()
{
	cin>>t;
	while(t--)
	{
		bool flag=false;
		scanf("%lld",&n);
		memset(mp,0,sizeof(mp));
		for(int i=0;i<=n-1;i++)
		{
			scanf("%lld",&a[i]);
		}
		for(int i=1-1;i<=n-1;i++)
		{
			int x=(i+a[i])%n;
			x=(x+n)%n;
			mp[x]++;
			if(mp[x]>=2)
			{
				flag=true;break;
			}
		}
		if(flag)
		{
			printf("NO\n");
		}
		else
		{
			printf("YES\n");
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章