1001 Robot
裸题,常数优化。double比较慢,除法比乘法慢,乘法比加法慢。

Code#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
double f[2][200+10];
int main()
{
int n,m,l,r,w;
while(scanf("%d%d%d%d",&n,&m,&l,&r)!=EOF){
if(n==0)break;
int now=0;
memset(f[0],0,sizeof(f[0]));f[0][1]=1;
for(int k=1;k<=m;k++){
scanf("%d",&w);now^=1;
for(int i=1;i<=n;i++)
f[now][i]=(f[now^1][i-w+(i-w>=1?0:n)]+
f[now^1][i+w-(i+w<=n?0:n)])*0.5;
//这样直接赋值不用memset,另外一个乘号大概比两个乘号快
}
double ans=0;
for(int i=l;i<=r;i++)ans+=f[now][i];
printf("%.4lf\n",ans);
}
return 0;
}