、
题意:有一个只知道长度为n的全排列 首尾相连,当你在第i位时,你下一次会在往前走A[i] 的位置上,现在有人进行了m次操作,给你这m次的位置,询问能否还原出任意这样的全排列,若不能输出-1。
水题,但是自己居然没有看错自己哪里错了。做了那么久。。。祭奠浪费的1给小时。
int a[N],vis[N];
int op[N];
bool ok(int n){
for(int i=1;i<=n;++i){
if(!a[i]||!vis[i])return false;
}
return true;
}
int main(){
int n,m;
sf("%d%d",&n,&m);
rep(i,1,m){ sf("%d",&op[i]); }
int flag=0;
for(int i=1;i<m;++i){
int x=op[i+1]-op[i];
if(x<=0)x+=n;
if(x>n)x%=n;
if((vis[x])&&a[op[i]]!=x){
flag=1;break;
}
vis[x]=1;
a[op[i]]=x;
}
if(flag){puts("-1");return 0;}
for(int i=1;i<=n;++i){
if(!a[i]){
for(int j=1;j<=n;++j){
if(!vis[j]){
a[i]=j;vis[j]=1;
break;
}
}
}
}
if(!ok(n)){puts("-1");return 0;}
else {
for(int i=1;i<=n;++i){
pf("%d%c",a[i],i==n?'\n':' ');
}
}
}