两个程序有什么不同吗?为什么一个AC一个WA?

https://vjudge.net/contest/334728#problem/A
题目也可以找上面的网址 Average Superhero Gang Power
图片说明

第一张wrong answer

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
double s[10000007];
long long a[1000005];
int main()
{
    int n,k,m,ans=0,p=0;//英雄数量,可以操作某个英雄的最次数,总的最大操作次数
    cin>>n>>k>>m;
    for(int i=1;i<=n;i++){cin>>a[i];ans+=a[i];}
    sort(a+1,a+1+n);
    a[n+1]=0;
    int z=min(n,m);
    for(int i=0;i<=z;i++)//i指删除数量 
    {
        s[i]=ans+min((long long )(m-i),(long long )k*(n-i));
        s[i]-=p;
        p=p+a[i+1];
        if(i==n)s[i]=0;
        else s[i]=s[i]/(n-i);
    }
    sort(s,s+z+1);
    printf("%0.20f",s[z]);
}

第二张 AC

#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long LL;
int arr[1000006];
double ans;
int main() {
    int n, k, m;
    scanf("%d%d%d", &n, &k, &m);
    LL sum = 0;
    for (int i=1;i<=n;i++)
    {
        scanf("%d", &arr[i]);
        sum += arr[i];
    }
    sort(arr + 1, arr + 1 + n);
    for (int i=0;i<n&&i<=m;i++) 
    {
        sum -= arr[i];
        ans = max(ans, (sum + min(1LL * m - i, 1LL * k * (n - i))) * 1.0 / (n - i));
    }
    printf("%0.20f", ans);
    return 0;
}