【hdu4405】AeroplaneChess

题目大意:问从0到n所花费时间平均时间。每次有投骰子,投到几就走几步。原题还有坐飞机

 

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
typedef long long ll;
const int inf=0x3f3f3f3f;
#define For(i,a,b) for(int i=a;i<=b;i++)
#define FFor(i,a,b) for(int i=a;i>=b;i--)
template <class T> inline T min(T a,T b,T c)
{
    return min(min(a,b),c);
}
template <class T> inline T max(T a,T b,T c)
{
    return max(max(a,b),c);
}
template <class T> inline T min(T a,T b,T c,T d)
{
    return min(min(a,b),min(c,d));
}
template <class T> inline T max(T a,T b,T c,T d)
{
    return max(max(a,b),max(c,d));
}
using namespace std;
const int N=1e5+5;
const double eps=1e-9;
//***********name**************
double f[N];
int n,m;
int trans[N];
//***********function**********

//******************************
int main()
{
//    freopen("test.txt","r",stdin);
    while(~scanf("%d%d",&n,&m))
    {
        if(n==0&&m==0)break;
        memset(f,0,sizeof(f));
        memset(trans,0,sizeof(trans));
        int a,b;
        For(i,1,m)
        {
            scanf("%d%d",&a,&b);
            trans[a]=b;
        }
        f[n]=0;
        FFor(i,n-1,0)
        if(trans[i])
            f[i]=f[trans[i]];
        else
        {
            For(j,1,6)
            f[i]+=f[i+j];
            f[i]/=6;
            f[i]+=1;
        }

        printf("%.4f\n",f[0]);
    }

    return 0;
}

 

posted @ 2018-05-20 11:22  planche  阅读(130)  评论(0编辑  收藏  举报