http://acm.cqu.edu.cn/oj/problem_show.php?pid=21464
本题不是很难,仔细观察就可以得知x+n-i是恒定的(x是每个人的金钱,n是队列的长度,i是在当前位置。如果那么很显然的一点是如果出现相同的xi+n-i,那么一定是无限交换队列。
下面附上AC代码。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cstring>
using namespace std;
const int maxn=2e6+10;
bool vis[maxn];
int main()
{
int t;
scanf("%d",&t);
int ca=1;
while(t--)
{
int n;
scanf("%d",&n);
bool flag=false;
memset(vis,false,sizeof(vis));
for(int i=0;i<n;i++)
{
int a;
scanf("%d",&a);
int b=a+n-i;
if(vis[b]) flag=true;//如果出现相同的
vis[b]=true;
}
if(flag)
{
printf("Case %d: No\n",ca++);
}else{
printf("Case %d: Yes\n",ca++);
}
}
}