本文主要是介绍《牛客》-D 小红的中位数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路这次采用两种写法 1.采用模拟的方式(用vector进行优化) 2.可以算是思维进行‘优化’
思路大家都挺好想的,就是其中的细节(具体思路可以参考以下代码,豁然开朗(逃~))
ACcode:
1(优雅帅气stl)
#include <bits/stdc++.h>
using namespace std;
//#define int long long
const int N=1e5+10;
int n;
void solve() {cin>>n;vector<int> a(n),b(n);for(int i=0; i<n; i++) {cin>>a[i];b[i]=a[i];}sort(a.begin(),a.end());for(int i=0; i<n; i++) {int it=lower_bound(a.begin(),a.end(),b[i])-a.begin();//找到元素在a的索引位置a.erase(a.begin()+it);int l=a.size()>>1,r=a.size()>>1;if(!(a.size()%2)) l--;cout<<fixed<<setprecision(1)<<(a[l]+a[r])*1.0/2<<endl;//重新添加回去a.insert(a.begin()+it,b[i]);}
}
signed main() {ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int tt=1;//cin>>tt;while(tt--) {solve();}return 0;
}
2(稳定思维判断)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,a[N],b[N];
void solve() {scanf("%lld",&n);for(int i=1; i<=n; i++) {scanf("%lld",&a[i]);b[i]=a[i];}sort(b+1,b+1+n);//1258if(n%2==0) {for(int i=1; i<=n; i++) {if(a[i]<=b[n/2]) {printf("%.1lf\n",(double)(b[n/2+1]*1.0));} else printf("%.1lf\n",(double)(b[n/2]*1.0));}} else {//1 2 3for(int i=1; i<=n; i++) {if(a[i]<b[n/2+1]) {printf("%.1lf\n",(double)(b[n/2+1]+b[n/2+2])/2.0);} else if(a[i]==b[n/2+1])printf("%.1lf\n",(double)(b[n/2+2]+b[n/2])/2.0);else printf("%.1lf\n",(double)(b[n/2+1]+b[n/2])/2.0);}}
}
signed main() {ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int tt=1;//cin>>tt;while(tt--) {solve();}return 0;
}
over~
这篇关于《牛客》-D 小红的中位数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!