题意:
思路:
对于一类构造排列问题,直接打表找找规律就行了
打表:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=3e5+10;
int N;
int a[mxn];
int sum[mxn];
void print(int n){
for(int i=1;i<=n;i++) cout<<a[i]<<" \n"[i==n];
}
void db(int n){
for(int i=1;i<=n;i++) a[i]=i;
do{
for(int i=1;i<=n;i++) sum[i]=0;
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
int ok=1;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if((sum[j]-sum[i-1])%(j-i+1)==0) ok=0;
}
}
if(ok) print(n);
}while(next_permutation(a+1,a+1+n));
}
void solve(){
for(int x=1;x<=10;x++){
db(x);
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;//cin>>__;
while(__--)solve();return 0;
}
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=3e5+10;
int N;
int a[mxn];
void solve(){
cin>>N;
if(N==1){
cout<<1<<'\n';
return;
}
if(N%2==1) cout<<-1<<'\n';
else{
int idx=0;
for(int i=2;i<=N;i+=2){
a[i]=++idx;
a[i-1]=++idx;
}
for(int i=1;i<=N;i++) cout<<a[i]<<" \n"[i==N];
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;cin>>__;
while(__--)solve();return 0;
}