题意:
有一个转盘...1~n..现在在1的位置..每次走一定的步数...可以向左可以向右..问最终落到一个区间的概率...
题解:
直接暴力模拟...汗...注意的是取模很费时间的...换种方式来...
Program:
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<stack>
#include<string.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
double dp[2][205];
int t[605];
int main()
{
int n,m,l,r,k,x,i;
while (~scanf("%d%d%d%d",&n,&m,&l,&r) && n)
{
l--,r--;
for (i=0;i<n;i++) t[i]=i;
for (i=0;i<n;i++) t[n+i]=i;
for (i=0;i<n;i++) t[n+n+i]=i;
for (i=0;i<n;i++) dp[0][i]=dp[1][i]=0;
k=0;
dp[0][0]=1;
while (m--)
{
k=1-k;
scanf("%d",&x);
for (i=0;i<n;i++) dp[k][i]=0;
for (i=0;i<n;i++)
{
dp[k][t[i+x]]+=dp[1-k][i]*0.5;
dp[k][t[i-x+n]]+=dp[1-k][i]*0.5;
}
}
double ans=0;
for (i=l;i<=r;i++) ans+=dp[k][i];
printf("%.4lf\n",ans);
}
return 0;
}