这题把 dp 上界设成 1e6 就过了,但设成 l−d+1 就 WA on #5,#6,#7,求 hack。
错误代码如下:
#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
const int N=1000005;
int n,l,d;
double dpy[N],dpx[N],fx[N],fy[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
scanf("%d%d%d",&n,&l,&d);
dpy[0]=1;
for(int i=0;i<=l-1+d;i++)
{
if(i!=0)fy[i]+=fy[i-1];
dpy[i]+=fy[i];
double ad=dpy[i]/d;
if(i<l)
{
fy[i+1]+=ad;
fy[i+d+1]-=ad;
dpy[i]=0;
}
}
for(int i=1;i<=l-1+d;i++)dpy[i]+=dpy[i-1];
double suf=0;
for(int i=n;i>=0;i--)
{
suf+=dpx[i+1]/d;
suf-=dpx[i+d+1]/d;
double stp=1-dpy[n];
if(i-1>=0)stp+=dpy[i-1];
dpx[i]=max(suf,stp);
}
printf("%.15lf",dpx[0]);
return 0;
}