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");
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章