O(n^2)暴力应该会作吧。
但是要TLE(松爷一下也许可以)
但是注意到题目中要求误差<5%
以下是精妙(鬼畜)的乱搞:
令i=a*j向下取整。
Ans=sigma(Ak*Aj/(j-k))(1<=k<=j-1)
因为误差<%5
于是乎我们就可以对式子进行奇妙(古怪)的化简:
Ans≈sigma(Ak*Aj/(j-0.5i))(1<=k<=i)≈sigma(Ak)(1<=k<=i)*Aj/(j-0.5i)
我们用一个前缀和求出sigma(Ak)(1<=k<=i)的值
然后就OK了。
但是这样做可能会卡精度。
于是我们暴力求出比较近的行星受力情况。
这样就可以AC了
/**************************************************************
Problem: 1011
User: zhouyuyang
Language: Pascal
Result: Accepted
Time:2208 ms
Memory:3156 kb
****************************************************************/
var
ans,m,pre:array [0..100005] of extended;
aa:extended;
n,i,now,j:longint;
function min(x,y:longint):longint;
begin if (x<y) then exit(x) else exit(y); end;
begin
read(n,aa);
for i:=1 to n do read(m[i]);
now:=0; ans[1]:=0;
for i:=2 to min(2000,n) do begin
if (i*aa+1e-9>=now+1) then inc(now);
for j:=1 to now do ans[i]:=ans[i]+m[i]*m[j]/(i-j);
end;
pre[0]:=0;
for i:=1 to n do pre[i]:=pre[i-1]+m[i];
for i:=2001 to n do begin
if (i*aa+1e-9>=now+1) then inc(now);
ans[i]:=pre[now]*m[i]/(i-now div 2);
end;
for i:=1 to n do writeln(ans[i]:0:6);
end.