P14546 整数中位数 题解
1. 题意解释
给出一个集合
2. 思路
考虑排序数组,从中间开始一个个加入,这样就能保持处于中间的两个数相同。
当
而当
由鸽巢原理可知至少会有
3. 代码实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[100100];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
if(n%2==0){
if(a[n/2]%2!=a[n/2+1]%2){
cout<<-1;
}
else{
int l=n/2,r=n/2+1;
for(int i=1;i<=n/2;i++){
cout<<a[l]<<" "<<a[r]<<" ";
l--,r++;
}
}
}
else{
if(n==1){
cout<<a[1];
}
else{
int mid=(n+1)/2;
if(a[mid]%2==a[mid-1]%2){
cout<<a[mid-1]<<" "<<a[mid]<<" ";
int l=mid-2,r=mid+2;
for(int i=1;i<=n/2-1;i++){
cout<<a[l]<<" "<<a[r]<<" ";
l--,r++;
}
cout<<a[mid+1];
}
else if(a[mid]%2==a[mid+1]%2){
cout<<a[mid]<<" "<<a[mid+1]<<" ";
int l=mid-2,r=mid+2;
for(int i=1;i<=n/2-1;i++){
cout<<a[l]<<" "<<a[r]<<" ";
l--,r++;
}
cout<<a[mid-1];
}
else if(a[mid-1]%2==a[mid+1]%2){
cout<<a[mid-1]<<" "<<a[mid+1]<<" ";
int l=mid-2,r=mid+2;
for(int i=1;i<=n/2-1;i++){
cout<<a[l]<<" "<<a[r]<<" ";
l--,r++;
}
cout<<a[mid];
}
}
}
return 0;
}