专栏文章
P14546 整数中位数 题解
P14546题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @min49fla
- 此快照首次捕获于
- 2025/12/01 20:19 3 个月前
- 此快照最后确认于
- 2025/12/01 20:19 3 个月前
1. 题意解释
给出一个集合 ,将 中的所有数加入一个新的集合 ,使得每次加入时 的中位数为整数。
2. 思路
考虑排序数组,从中间开始一个个加入,这样就能保持处于中间的两个数相同。
当 为偶数时,显然取第 和 个数,若奇偶性不同则显然无解。
而当 为奇数时,有三个数,分别是第 ,, 个数,从中选取两个奇偶性相同的即可。
由鸽巢原理可知至少会有 个奇偶性相同的,因此可行。
3. 代码实现
CPP#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;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...