【链接】
bzoj1011
【解题报告】
这题看题解才知道是估计题,可以发现用 j−i2 作为分母能够得到较为精确的答案。于是装作 Mj∑⌊A×j⌋i=1Mij−i2 是答案就行了。
#include<cstdio>
using namespace std;
const int maxn=100005;
int n;
double A,ans,a[maxn],sum[maxn];
int main()
{
freopen("1011.in","r",stdin);
freopen("1011.out","w",stdout);
scanf("%d%lf",&n,&A);
for (int i=1; i<=n; i++) scanf("%lf",&a[i]),sum[i]=sum[i-1]+a[i];
for (int i=1; i<=n; i++)
{
int j=A*i+1e-8; ans=0;
if (j<=1000) for (int k=1; k<=j; k++) ans+=a[i]/(i-k)*a[k];
else ans+=a[i]/(i-j/2)*sum[j];
printf("%.6lf\n",ans);
}
return 0;
}