Submission #5441997


Source Code Expand

import java.io.*;
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;

@SuppressWarnings("unused")
public class Main {
	
	//final boolean isDebug = true;
	final boolean isDebug = false;
	String fileName = "input.txt";
	FastScanner sc;
	PrintWriter out;
	final int MOD = (int)1e9+7;
	final int INF = Integer.MAX_VALUE / 2;
	
	void solve() throws Exception{
		int N = sc.nextInt();
		long D = sc.nextLong();
		int[] num = new int[3];
		
		int[] p = {2, 3, 5};
		long d = D;
		for(int i = 0; i < 3; i++){
			while(d % p[i] == 0){
				d /= p[i];
				num[i]++;
			}
		}
		if(d != 1){
			System.out.println("0");
			return;
		}
		
		double[][][][] dp = new double[N+1][num[0]+1][num[1]+1][num[2]+1];
		dp[0][0][0][0] = 1.0;
		for(int i = 0; i <= N-1; i++){
			for(int j = 0; j <= num[0]; j++){
				for(int k = 0; k <= num[1]; k++){
					for(int m = 0; m <= num[2]; m++){
						dp[i+1][j][k][m] += dp[i][j][k][m] / 6;
						dp[i+1][Math.min(j+1, num[0])][k][m] += dp[i][j][k][m] / 6;
						dp[i+1][j][Math.min(k+1, num[1])][m] += dp[i][j][k][m] / 6;
						dp[i+1][Math.min(j+2, num[0])][k][m] += dp[i][j][k][m] / 6;
						dp[i+1][j][k][Math.min(m+1, num[2])] += dp[i][j][k][m] / 6;
						dp[i+1][Math.min(j+1, num[0])][Math.min(k+1, num[1])][m] += dp[i][j][k][m] / 6;
					}
				}
			}
		}
		System.out.println(dp[N][num[0]][num[1]][num[2]]);
	}
	
	/* end solve */
	
	/* main */
	public static void main(String[] args) throws Exception {
		new Main().m();
	}
	
	void m() throws Exception {
		long S = System.currentTimeMillis();
		sc = (isDebug) ? new FastScanner(new FileInputStream(fileName)) : new FastScanner(System.in);
		out = new PrintWriter(System.out);
		solve();
		out.flush();
		long G = System.currentTimeMillis();
		if(isDebug){
			System.out.println("---Debug---");
			System.out.printf("%8d ms\n", (G-S));
		}
	}
	/* end main */
}
/* end Main */

class FastScanner {
    private InputStream in;
    private final byte[] buffer = new byte[1024];
    private int ptr = 0;
    private int buflen = 0;
    public FastScanner(InputStream in) {
		this.in = in;
	}
    private boolean hasNextByte() {
        if (ptr < buflen) {
            return true;
        }else{
            ptr = 0;
            try {
                buflen = in.read(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (buflen <= 0) {
                return false;
            }
        }
        return true;
    }
    private int readByte() {
    	if (hasNextByte()) return buffer[ptr++];
    	else return -1;
    }
    private static boolean isPrintableChar(int c){
    	return 33 <= c && c <= 126;
    }
    public boolean hasNext() {
    	while(hasNextByte() && !isPrintableChar(buffer[ptr]))
    		ptr++; return hasNextByte();
    }
    public String next() {
        if (!hasNext()) throw new NoSuchElementException();
        StringBuilder sb = new StringBuilder();
        int b = readByte();
        while(isPrintableChar(b)) {
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }
    public String nextLine() {
        if (!hasNext()) throw new NoSuchElementException();
        StringBuilder sb = new StringBuilder();
        int b = readByte();
        while(b != 10) {
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }
    public long nextLong() {
        if (!hasNext()) throw new NoSuchElementException();
        long n = 0;
        boolean minus = false;
        int b = readByte();
        if (b == '-') {
            minus = true;
            b = readByte();
        }
        if (b < '0' || '9' < b) {
            throw new NumberFormatException();
        }
        while(true){
            if ('0' <= b && b <= '9') {
                n *= 10;
                n += b - '0';
            }else if(b == -1 || !isPrintableChar(b)){
                return minus ? -n : n;
            }else{
                throw new NumberFormatException();
            }
            b = readByte();
        }
    }
    public int nextInt() {
        long nl = nextLong();
        if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) throw new NumberFormatException();
        return (int) nl;
    }
    public double nextDouble() {
    	return Double.parseDouble(next());
    }
}

Submission Info

Submission Time
Task D - サイコロ
User Oland
Language Java8 (OpenJDK 1.8.0)
Score 4
Code Size 4528 Byte
Status AC
Exec Time 114 ms
Memory 21844 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 71 ms 17620 KB
01 AC 113 ms 21844 KB
02 AC 89 ms 20436 KB
03 AC 90 ms 20308 KB
04 AC 80 ms 19668 KB
05 AC 114 ms 21716 KB
06 AC 105 ms 20692 KB
07 AC 94 ms 19668 KB
08 AC 87 ms 19028 KB
09 AC 76 ms 20820 KB
10 AC 70 ms 19028 KB
90 AC 71 ms 21460 KB
91 AC 71 ms 19412 KB