【解题思路】

  这题解法很多,我也不知道标算是什么。。这简直就是大放水啊。。

  网上流传的乱搞法,对于小范围内(假设为[1,l]∩N)暴力,大范围内估算。

  我写这题时还是写P的?!。。但是我看不懂我当时写了什么,也忘了当时看的哪篇博客。。

  贴个代码跑。。理论复杂度O(nl+n2a(1-a)),然后A了?!

  不知bzoj数据有没有加强。。

【参考代码】

 1 const
 2     ladder=100;
 3 var
 4     n,i,j,k:longint;
 5     limit:extended;
 6     m,g:array [1..100000] of longint;
 7     f:array [1..100000] of extended;
 8 begin
 9     read(n,limit);
10     for i:=1 to n do
11     begin
12         read(m[i]);
13         g[i]:=trunc(i*limit);
14     end;
15     fillchar(f,sizeof(f),0);
16     for i:=1 to n do
17         if g[i]>0 then
18             if i<=ladder then
19             begin
20                 for j:=1 to g[i] do f[i]:=f[i]+m[j]/(i-j);
21                 f[i]:=f[i]*m[i];
22             end
23             else
24             begin
25                 k:=i-ladder;
26                 f[i]:=f[k]/m[k]*(k-g[k]/2)/(i-g[k]/2);
27                 for j:=g[k]+1 to g[i] do f[i]:=f[i]+m[j]/(i-j);
28                 f[i]:=f[i]*m[i];
29             end;
30     for i:=1 to n do writeln(f[i]:0:6);
31 end.
View Code