//#include <iostream>
//#include <cstdio>
//#include <cstring>
//
//using namespace std;
//#define maxn 100000+10
//
//int n, m;
//bool vis[maxn];
//double d[maxn];
//int a[maxn];
//
//
//double dp(int k)
//{
//
// if(vis[k]) return d[k];
// vis[k] = true;
// if(k == n) return 0;
//
// if(a[k]) return d[k] = dp(a[k]);
//
// for(int i=1; i<=6; i++)
// if(k+i <= n)
// {
// d[k] += dp(k+i)/6;
// }
// return d[k] += 1;
//}
//
//int main()
//{
// while(~scanf("%d%d", &n, &m) && n+m)
// {
// memset(vis, false, sizeof(vis));
// memset(d, 0, sizeof(d));
// memset(a, 0, sizeof(a));
// int p, q;
// for(int i=0; i<m; i++)
// {
// cin>>p>>q;
// a[p] = q;
// }
// dp(0);
// printf("%.4lf\n", d[0]);
// }
// return 0;
//}
#include <bits/stdc++.h>
using namespace std;
#define maxn 100000+10
int n, m, a[maxn];
double d[maxn];
int main()
{
while(~scanf("%d%d", &n, &m) && n+m)
{
memset(a, 0, sizeof(a));
memset(d, 0, sizeof(d));
int p , q;
for(int i=0; i<m; i++)
{
cin>>p>>q;
a[p] = q;
}
d[n] = 0;
for(int i=n-1; i>=0; i--)
{
if(a[i])
{
d[i] = d[a[i]];
}
else
{
for(int j=1; j<=6; j++)
if(i+j <= n) d[i] += d[i+j]/6;
else break;
d[i] +=1;
}
}
printf("%.4lf\n", d[0]);
}
return 0;
}
hdu 4405
最新推荐文章于 2021-01-19 20:52:36 发布