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 ",ans); } return 0; }