题目链接
- 题意:
给定一个长度为n的环形(1 - n),初始在1点。m次操作,每次给一个整数t,表示从当前位置向左向右t的概率相等,求最后停在[l, r]的概率是多少 - 分析:
简单的概率DP,数据范围比较大,需要注意
const int MAXN = 201;
double dp[2][MAXN];
double p = 0.5;
int main()
{
// freopen("in.txt", "r", stdin);
int n, k, l, r;
while (~RIV(n, k, l, r) && n)
{
CLR(dp, 0); dp[0][0] = 1;
int cur = 0;
REP(i, k)
{
int t;
RI(t);
cur ^= 1;
REP(i, n) dp[cur][i] = 0;
REP(i, n)
{
if (dp[cur ^ 1][i] < EPS) continue; //这里需要注意
dp[cur][(i + t) % n] += dp[cur ^ 1][i] * p;
dp[cur][(i + n - t) % n] += dp[cur ^ 1][i] * p;
}
}
double ans = 0;
FE(i, l - 1, r - 1)
{
ans += dp[cur][i];
}
printf("%.4f\n", ans);
}
return 0;
}