Submission #5374846
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define REP(i,begin, n) for(int i=begin;i<n;i++)
typedef long long int lli;
typedef pair<int, int> P;
map<lli, lli> fac;
// dp[i][j][k][l]: i個目のサイコロを振った時点で2,3,5がそれぞれj,k,l個使われている確率
double dp[100][201][101][101];
int main() {
int n;
lli d;
cin >> n >> d;
while(d%2==0){
d=d/2;
fac[2]++;
}
while(d%3==0){
d=d/3;
fac[3]++;
}
while(d%5==0){
d=d/5;
fac[5]++;
}
if(d!=1){
cout<<0<<endl;
return 0;
}
dp[0][0][0][0] = 1.0;
REP(i, 0, n) {
REP(j, 0, 201) {
REP(k, 0, 101) {
if (j/2+k > n)
break;
REP(l, 0, 101) {
if (j/2+k+l > n)
break;
// 1
dp[i+1][j][k][l] += dp[i][j][k][l] * 1 / 6.0;
// 2
dp[i+1][min(j+1, 60)][k][l] += dp[i][j][k][l] * 1 / 6.0;
// 3
dp[i+1][j][min(k+1, 60)][l] += dp[i][j][k][l] * 1 / 6.0;
// 4
dp[i+1][min(j+2, 60)][k][l] += dp[i][j][k][l] * 1 / 6.0;
// 5
dp[i+1][j][k][min(l+1, 60)] += dp[i][j][k][l] * 1 / 6.0;
// 6
dp[i+1][min(j+1, 60)][min(k+1, 60)][l] += dp[i][j][k][l] * 1 / 6.0;
}
}
}
}
double ans = 0;
REP(j, fac[2], 201) {
REP(k, fac[3], 101) {
REP(l, fac[5], 101) {
ans += dp[n][j][k][l];
}
}
}
cout << ans << endl;
}
Submission Info
Submission Time |
|
Task |
D - サイコロ |
User |
longtime |
Language |
C++14 (GCC 5.4.1) |
Score |
0 |
Code Size |
1813 Byte |
Status |
MLE |
Exec Time |
727 ms |
Memory |
1442048 KB |
Judge Result
Set Name |
All |
Score / Max Score |
0 / 4 |
Status |
|
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 |
56 ms |
231680 KB |
01 |
MLE |
575 ms |
1276160 KB |
02 |
MLE |
444 ms |
1083648 KB |
03 |
MLE |
71 ms |
282880 KB |
04 |
MLE |
67 ms |
270592 KB |
05 |
MLE |
727 ms |
1442048 KB |
06 |
MLE |
554 ms |
1247488 KB |
07 |
MLE |
478 ms |
1134848 KB |
08 |
AC |
20 ms |
86272 KB |
09 |
MLE |
429 ms |
1057024 KB |
10 |
AC |
1 ms |
256 KB |
90 |
AC |
5 ms |
6400 KB |
91 |
AC |
5 ms |
8448 KB |