P9578 「Cfz Round 1」Permutation 题解
Defy_HeavenS · · 题解
题意(我尽量不用太多数学式子)
定义一个函数
你需要构造一个元素为
思路
观察数据范围,提示我们可以奇偶数分别考虑,暴力构造
奇数
下标为奇数 正着枚举 是
可以构造数组
偶数
对半分左边一半下标为奇数的与它们相对称的都为下标本身。
对半分左边一半下标为偶数的与它们相对称的相加为
*正着枚举是指从
可以构造数组
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[1000005];
int main(){
cin>>n;
if(n%2==0){
for(int i=2,j=n-1;i<=n/2;i+=2,j-=2){
a[i]=j;
a[n-i+1]=n+1-j;
}
for(int i=1;i<=n;i++){
if(!a[i]){
cout<<i<<" ";
}else{
cout<<a[i]<<" ";
}
}
}else{
a[1]=1;
for(int i=3,j=2;i<=n;i+=2,j+=2){
a[i]=j;
}
for(int i=2,j=n;i<=n;i+=2,j-=2){
a[i]=j;
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
return 0;
}