莫名其妙概率超过 1(
#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
int n,l,d,e;
ld k,t,ans,r,s[400009],a[400009],b[400009];
inline ld gs(int x){ld r=0;while(x) r+=s[x],x^=(x&-x);return r;}
inline void upd(int x,ld k){while(x<=n*2) s[x]+=k,x+=x&-x;}
int main(){
cin>>n>>l>>d;
//Dealer:
upd(1,1);
for(int i=1;i<l;++i) k=gs(i),upd(i,-k),upd(i+1,k),k/=d,upd(i+1,k),upd(i+d+1,-k);
for(int i=1;i<=n*2;++i) b[i]=gs(i);
for(int i=n+1;i<=n*2;++i) t+=b[i];
for(int i=1;i<=n;++i) a[i]=a[i-1]+b[i]*i;
for(int i=2;i<=n;++i) b[i]+=b[i-1];
//You:
memset(s,0,sizeof(s));
upd(1,1);
for(int i=1;i<=n-d;++i) k=gs(i),upd(i,-k),upd(i+1,k),k/=d,upd(i+1,k),upd(i+d+1,-k);
for(int i=2;i<=n;++i) r+=gs(i)*b[i-1];
r+=t,ans=r;
for(int i=n-d+1;i<n;++i) k=gs(i),upd(i,-k),upd(i+1,k),r-=k*b[i-1],k/=d,upd(i+1,k),upd(i+d+1,-k),e=min(i+d,n)-i,r+=k*(b[i+e-1]*e-i*(b[i+e-1]-b[i])+a[i+e-1]-a[i]),ans=max(ans,r);
cout<<ans;
return 0;
}