#include #include #include #include struct Result { int sum , num; }; int main() { int N; std::cin >> N; int K; std::cin >> K; int den = pow(6 , N); double p1[61]; double p2[61]; for(int i=0;i<=6*N;i++) { p1[i] = 0; p2[i] = 0; } std::stack s; for(int i=1 ; i<=6 ; i++) { s.push(Result{i,1}); } while(s.size() > 0) { Result node = s.top(); s.pop(); if(node.num==N) { p2[node.sum]++; } if(node.num < N) { for(int i=1;i<=6;i++) { s.push(Result{node.sum+i,node.num+1}); } } } for(int i=0 ; i<=6*N ; i++) { p2[i] /= (double)den; } if(K==0) { for(int i=0 ; i<=6*N ; i++) { p1[i] = p2[i]; } } else { for(int i=4 ; i<=6 ; i++) { s.push(Result{i,1}); s.push(Result{i,1}); } while(s.size() > 0) { Result node = s.top(); s.pop(); if(node.num==N) { p1[node.sum]++; } if(node.num < K) { for(int i=4;i<=6;i++) { s.push(Result{node.sum+i,node.num+1}); s.push(Result{node.sum+i,node.num+1}); } } else if(node.num < N) { for(int i=1;i<=6;i++) { s.push(Result{node.sum+i,node.num+1}); } } } for(int i=0 ; i<=6*N ; i++) { p1[i] /= (double)den; } } double prob = 0; for(int n1=0 ; n1<=6*N ; n1++) for(int n2=0 ; n2