Aeroplane chessTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5986 Accepted Submission(s): 3723 Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal probability to face up and the numbers on the faces are 1,2,3,4,5,6). When Hzz is at grid i and the dice number is x, he will moves to grid i+x. Hzz finishes the game when i+x is equal to or greater than N.
Input There are multiple test cases.
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
Source 2012 ACM/ICPC Asia Regional Jinhua Online
Recommend zhoujiaqi2010
|
#include <cstdio>
#include <iostream>
#include <cstring>
#define MAXN 100100
double dp[MAXN];
int t[MAXN];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m),n!=0||m!=0)
{
memset(t,0,sizeof(t));
memset(dp,0,sizeof(dp));
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
t[a]=b;
}
dp[n]=0.0;
int i,j;
for(i=n-1;i>=0;i--)
{
if(t[i])
{
dp[i]=dp[t[i]];
}
else
{
for(j=i+6;j>=i+1;j--)
dp[i]+=1.0/6.0*dp[j];
dp[i]++;
}
}
printf("%.4lf\n",dp[0]);
}
}