题意:
ppi = n - i + 1.构造一个1到n的序列满足该式子。
解题思路:
观察一下可以发现四个为一组。
如:
2 4 1 3
Pp1=P2=4-1+1=4
Pp2=P4=4-2+1=3
Pp3=P1=4-3+1=2;
Pp4=P3=4-4+1=1;
1和4的位置对应到3和2的位置,满足四个为一组的能构成,如果多一个也可以,放在最中间Ppi正好等于自己也可以,其它情况(n%4>1)全都不行。
然后就是四个一组去构造就行了,把相邻两个数及其对应的n-i+1分卫一组。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int book[maxn];
int main()
{
int n, i;
cin>>n;
if(n==1)return 0*printf("1\n");
if(n%4>1)return 0*printf("-1\n");
int m=n;
if(n&1)
{
a[n/2+1]=n/2+1;
book[n/2+1]=1;
}
a[1]=2;
a[2]=n;
a[n]=n-1;
a[n-1]=1;
book[2]=1;
book[1]=1;
book[n]=1;
book[n-1]=1;
for(i=1; i<=n; i++)
{
if(book[i]==0)
{
int x;
x=i+1;
a[i]=x;
a[x]=n-i+1;
a[n-i+1]=n-x+1;
a[n-x+1]=i;
book[i]=1;
book[x]=1;
book[n-x+1]=1;
book[n-i+1]=1;
}
}
printf("%d", a[1]);
for(i=2; i<=n; i++)
{
printf(" %d", a[i]);
}
}