CF 303A(Lucky Permutation Triple-打表-數列全排列)
Bike is interested in permutations. A permutation of length n is an integer sequence such that each integer from 0 to (n - 1) appears exactly once in it. For example, [0, 2, 1] is a permutation of length 3 while both [0, 2, 2] and [1, 2, 3] is not.
A permutation triple of permutations of length n (a
Now, he has an integer n and wants to find a Lucky Permutation Triple. Could you please help him?
The first line contains a single integer n (1 ≤ n ≤ 105).
OutputIf no Lucky Permutation Triple of length n exists print -1.
Otherwise, you need to print three lines. Each line contains n space-seperated integers. The first line must contain permutation a,
the second line — permutation b
If there are multiple solutions, print any of them.
Sample test(s) input5output
1 4 3 2 0 1 0 2 4 3 2 4 0 1 3input
2output
-1Note
In Sample 1, the permutation triple ([1, 4, 3, 2, 0], [1, 0, 2, 4, 3], [2, 4, 0, 1, 3]) is Lucky Permutation Triple, as following holds:
In Sample 2, you can easily notice that no lucky permutation triple exists.
若n為偶數則無解 否則a和b都為0..n-1,c求出來正好是全排列#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<=n;i++)
#define Forp(x) for(int p=pre[x];p;p=next[p])
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int n;
cin>>n;
if (n%2==0) puts("-1");
else
{
Rep(i,n-2) cout<<i<<' ';cout<<n-1<<endl;
Rep(i,n-2) cout<<i<<' ';cout<<n-1<<endl;
Rep(i,n-2) cout<<(2*i)%n<<' ';cout<<(2*n-2)%n<<endl;
}
return 0;
}