結果
| 問題 |
No.58 イカサマなサイコロ
|
| コンテスト | |
| ユーザー |
togari_takamoto
|
| 提出日時 | 2016-03-08 00:31:39 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 748 bytes |
| コンパイル時間 | 1,553 ms |
| コンパイル使用メモリ | 165,256 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-24 13:28:57 |
| 合計ジャッジ時間 | 1,972 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vd = vector<double>;
using vvd = vector<vd>;
#define REP(i,n) for(ll i=0; i<(n); ++i)
#define FOR(i,b,n) for(ll i=(b); i<(n); ++i)
int main() {
cout << fixed << setprecision(30);
ll n, k; cin >> n >> k;
vvd dp1(11, vd(61, 0));
vvd dp2(11, vd(61, 0));
dp1[0][0] = dp2[0][0] = 1;
REP(i, n) REP(j,61){
FOR(l, 1, 7) if(j + l < 61) dp1[i + 1][j + l] += dp1[i][j] / 6;
if (k > i) {
FOR(l, 4, 7) if (j + l < 61) dp2[i + 1][j + l] += dp2[i][j] / 3;
} else {
FOR(l, 1, 7) if (j + l < 61) dp2[i + 1][j + l] += dp2[i][j] / 6;
}
}
double ans = 0;
FOR(i, 1, 61) for (ll j = i-1; j >= 0; --j) ans += dp2[n][i] * dp1[n][j];
cout << ans << endl;
return 0;
}
togari_takamoto