Areoplane chess
傳送門1
傳送門2
Hzz loves aeroplane chess very much. The chess map contains
There are also M flight lines on the chess map. The i-th flight line can help Hzz fly from grid
Please help Hzz calculate the expected dice throwing times to finish the game.
Input
There are multiple test cases.
Each test case contains several lines.
The first line contains two integers
Then
The input end with
Output
For each test case in the input, you should output a line indicating the expected dice throwing times. Output should be rounded to 4 digits after decimal point.
Sample Input
2 0
8 3
2 4
4 5
7 8
0 0
Sample Output
1.1667
2.3441
題意
數軸上有
分析
期望dp.(期望dp一般逆推)
定義
1. 對於可以直接飛的點,
2. 不能飛的點,
CODE
#include<cstdio>
#include<memory.h>
#define N 100005
#define FOR(i,a,b) for(int i=(a),i##_END_=(b);i<=i##_END_;i++)
#define ROF(i,a,b) for(int i=(a),i##_END_=(b);i>=i##_END_;i--)
double dp[N];
int fly[N];
int main() {
int n,m;
while(~scanf("%d%d",&n,&m)&&(n||m)) {
memset(fly,-1,sizeof fly);
FOR(i,1,m) {
int a,b;
scanf("%d%d",&a,&b);
fly[a]=b;
}
memset(dp,0,sizeof dp);
ROF(i,n-1,0) {
if(fly[i]==-1) {
FOR(j,i+1,i+6)dp[i]+=dp[j]/6.0;
dp[i]++;
} else dp[i]=dp[fly[i]];
}
printf("%.4lf\n",dp[0]);
}
return 0;
}