题目大意:问从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; }