//#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; }
时间: 2024-10-17 00:33:50