Submission #5695120


Source Code Expand

#include<bits/stdc++.h>
#define REP(i,n) for(int i = 0; i < n; ++i)
#define REPR(i,n) for(int i = n; i >= 0; --i)
#define FOR(i,a,b) for(int i = (a); i < (b); ++i)
#define FORR(i, a, b) for(int i = b-1;i >= a;--i)
#define p(s) cout << (s) << endl
#define p2(s,t) cout << (s) << " " << (t) << endl 
#define ALL(v) (v).begin(), (v).end()
#define m0(x) memset(x,0,sizeof(x))
typedef long long ll;
using namespace std;

int main(){
    int N;
    ll D;
    cin >> N >> D;
    int I = 0, J = 0, K = 0;
    while(D % 2 == 0){
        D /= 2;
        I++;
    }
    while(D % 3 == 0){
        D /= 3;
        J++;
    }
    while(D % 5 == 0){
        D /= 5;
        K++;
    }
    if(D != 1){
        cout << 0 << endl;
        return 0;
    }else{

        
        double dp[101][100][50][50];
        /*REP(i,I+1){
            REP(j,J+1){
                REP(k,K+1){
                    dp[0][i][j][k] = 0;
                }
            }
        }*/
        dp[0][0][0][0] = 1;
        REP(n,N+1){
            REP(i,I+1){
                REP(j,J+1){
                    REP(k,K+1){
                        dp[n+1][i][j][k] += 1/6.0 * dp[n][i][j][k];
                        dp[n+1][min(i+1,I)][j][k] += 1/6.0 * dp[n][i][j][k];
                        dp[n+1][i][min(j+1,J)][k] += 1/6.0 * dp[n][i][j][k];
                        dp[n+1][i][j][min(k+1,K)] += 1/6.0 * dp[n][i][j][k];
                        dp[n+1][min(i+2,I)][j][k] += 1/6.0 * dp[n][i][j][k];
                        dp[n+1][min(i+1,I)][min(j+1,J)][k] += 1/6.0 * dp[n][i][j][k];
                    }
                }
            }
        }
    // cout << I <<" " << J <<" " << K << endl;
      printf("%.15lf\n", dp[N][I][J][K] );
    }
}   
/*    ll cnt2 = 0, cnt3 = 0, cnt5 = 0;
    ll tmp = D;
    while(tmp % 2 == 0){
        tmp /= 2;
        cnt2++;
    }
    tmp = D;
    while(tmp % 3 == 0){
        tmp /= 3;
        cnt3++;
    }
    tmp = D;
    while(tmp % 5 == 0){
        tmp /= 5;
        cnt5++;
    }
    ll dp[cnt2+1][cnt3+1][cnt5+1];
    dp[0][0][0] = 1;
    for(int i = 0; i < N; i++){
        RREP(j,cnt2+1){
            RREP(k,cnt3+1){
                RREP(l,cnt5){
                    if(l == cnt5) dp[j][k][l] = dp[j-1][k][l] + dp[j-1][k-1][l] + dp[j-2][k][l] + ;
                }
            }
        }
    }
    */

Submission Info

Submission Time
Task D - サイコロ
User raoZ
Language C++14 (GCC 5.4.1)
Score 4
Code Size 2397 Byte
Status AC
Exec Time 36 ms
Memory 178432 KB

Judge Result

Set Name All
Score / Max Score 4 / 4
Status
AC × 13
Set Name Test Cases
All 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 90, 91
Case Name Status Exec Time Memory
00 AC 14 ms 65792 KB
01 AC 33 ms 164096 KB
02 AC 30 ms 149760 KB
03 AC 15 ms 71936 KB
04 AC 15 ms 71936 KB
05 AC 36 ms 178432 KB
06 AC 33 ms 162048 KB
07 AC 32 ms 155904 KB
08 AC 8 ms 35072 KB
09 AC 30 ms 149760 KB
10 AC 1 ms 256 KB
90 AC 2 ms 6400 KB
91 AC 2 ms 8448 KB