結果
問題 | No.301 サイコロで確率問題 (1) |
ユーザー | tnakao0123 |
提出日時 | 2016-04-02 18:33:32 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 896 ms / 1,000 ms |
コード長 | 1,176 bytes |
コンパイル時間 | 848 ms |
コンパイル使用メモリ | 85,760 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-02 12:29:18 |
合計ジャッジ時間 | 3,318 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 896 ms
5,248 KB |
testcase_01 | AC | 34 ms
5,248 KB |
ソースコード
/* -*- coding: utf-8 -*- * * 301.cc: No.301 サイコロで確率問題 (1) - yukicoder */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<stack> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<functional> using namespace std; /* constant */ const int MAX_N = 1000; /* typedef */ typedef long long ll; /* global variables */ double es[MAX_N + 1]; /* subroutines */ double check(double d, ll n) { es[0] = 0.0; for (int i = 1; i <= n; i++) { double sum = 0.0; for (int j = 1; j <= 6; j++) sum += (i >= j) ? es[i - j] : d; es[i] = 1.0 + sum / 6; } return es[n]; } /* main */ int main() { int tn; cin >> tn; while (tn--) { ll n; cin >> n; if (n > MAX_N) { printf("%.13lf\n", 5.0 / 3 + n); continue; } double l = 0.0, r = 1e10; for (int i = 0; i < 100; i++) { double d = (l + r) / 2; if (check(d, n) >= d) l = d; else r = d; } printf("%.13lf\n", l); } return 0; }