20分求助(码风清奇,勿喷)

B2095 白细胞计数

zhenghao20220503 @ 2024-11-03 09:31:33

#include <bits/stdc++.h>
using namespace std;
double a[10000000+5];
int main()
{
    long long n;
    double min=100000000,max=0,ans=0,max1=0,t,s;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        if(a[i]>max) max=a[i];
        if(a[i]<min) min=a[i];
    } 
    for(int i=1;i<=n;i++)
    {
        if(a[i]!=max && a[i]!=min) ans+=a[i];
    }
    t=ans/(n-2);
    for(int i=1;i<=n;i++)
    {
        if(a[i]!=max && a[i]!=min) s=abs(a[i]-t);
        if(s>max1) max1=s; 
    }
    printf("%.2f",t);
    cout<<" ";
    printf("%.2f",max1);
    return 0;
}

by qiaochu @ 2024-11-03 09:35:52

@zhenghao20220503

#include<bits/stdc++.h>
using namespace std;
//快排
void f(double a[],int l,int r)
{
    if(l>r)return;
    int i,j,temp,t;
    temp=a[l];
    i=l;
    j=r;
    while(i!=j)
    {
        while(a[j]>=temp && i<j)
        {
            j--;
        }
        while(a[i]<=temp && i<j)
        {
            i++;
        }
        if(i<j)
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[l]=a[i];
    a[i]=temp;
    f(a,l,i-1);
    f(a,i+1,r);
}
int main()
{
    int n;
    double a[10010],max,ans=0;
    cin>>n;

    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    f(a,1,n);
    for(int i=2;i<n;i++)
    {
        ans+=a[i];
    }
    ans/=(n-2);
    cout<<fixed<<setprecision(2)<<ans<<" ";
    max=abs(ans-a[2]);
    for(int i=3;i<n;i++)
    {
        if(abs(ans-a[i])>max)max=abs(ans-a[i]);
    }
    cout<<fixed<<setprecision(2)<<max;
}

|