题意: Ppi=n-i+1. p为一个序列,求这个p序列。不存在输出-1.
经验算,我们可以发现 Ppi (i 为 1~n)对应的值为n~1. 所以 我们设 p1里的数 为x,那么px里的数 就为 n,pn里的数为 y,py里的数为1. 这样就是一个环了。 如果整个数列存在偶数个环,那么这个序列就存在了。当然,如果n为奇数,那么中间那个数自己就是一个环。剩下的就是把环两两配对。配对方法是随意的。
WY 同学 ,你懂了么~^_^
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,s[111111];
int main(){
while(scanf("%d",&n)!=EOF){
int k=0,it,flag=0;
if(n%2) k=1;
it=(n-k)/2;
if(it%2==0){
for(int i=1;i<it;i+=2){
s[i]=i+1;
s[i+1]=n-i+1;
s[n-i+1]=n-i;
s[n-i]=i;
}
if(k==1) s[n/2+1]=n/2+1;
for(int i=1;i<=n;i++){
printf("%d ",s[i]);
}
}
else{
printf("-1");
}
printf("\n");
}
return 0;
}