1 条题解

  • 0
    @ 2026-7-4 11:13:54

    #include <cstdio>
    const int M = 5005;
    #define int long long
    #define db double
    int read()
    {
    	int x=0,f=1;char c;
    	while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;}
    	while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    	return x*f;
    }
    int n,m,k;db b[M],c[M],s,ans;
    signed main()
    {
    	n=read();m=read();s=read();
    	for(int i=1;i<=n;i++)
    	{
    		int x=read();
    		b[++k]=x;c[k]=1;
    		while(k>1 && b[k]*c[k-1]<=b[k-1]*c[k])
    		{
    			b[k-1]+=b[k];
    			c[k-1]+=c[k];
    			k--;
    		}
    	}
    	for(int i=k;i>=1;i--)
    	{
    		if(m*c[i]<=s)
    		{
    			ans+=b[i]*m;
    			s-=m*c[i];
    		}
    		else
    		{
    			ans+=b[i]*(s/c[i]);
    			break;
    		}
    	}
    	printf("%.8f\n",ans);
    }
    
    
    • 1

    信息

    ID
    9200
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者