結果
問題 | No.76 回数の期待値で練習 |
ユーザー | Mazesoba |
提出日時 | 2022-08-28 08:20:24 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 746 ms / 5,000 ms |
コード長 | 1,341 bytes |
コンパイル時間 | 5,198 ms |
コンパイル使用メモリ | 262,960 KB |
実行使用メモリ | 18,468 KB |
最終ジャッジ日時 | 2024-10-15 07:29:42 |
合計ジャッジ時間 | 5,863 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,820 KB |
testcase_01 | AC | 746 ms
18,468 KB |
ソースコード
#include <atcoder/all> #include <bits/stdc++.h> using namespace std; //#define DISABLE_PRINT #if defined(ENABLE_PRINT) && !defined(DISABLE_PRINT) #define P(...) fprintf(stderr, __VA_ARGS__) #define LP fprintf(stderr, "L: %d\n", __LINE__) #else #define P(...) ((void)0) #define LP ((void)0) #endif #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define ALL(x) x.begin(), x.end() using ll = long long; using ull = unsigned long long; double p[6]; const double E[] = { 0, 1.0000000000000000, 1.0833333333333333, 1.2569444444444444, 1.5353009259259260, 1.6915991512345676, 2.0513639724794235, }; void setup() { p[0] = E[2] - 1; p[1] = E[3] - p[0] * E[2] - 1; p[2] = E[4] - p[0] * E[3] - p[1] * E[2] - 1; p[3] = E[5] - p[0] * E[4] - p[1] * E[3] - p[2] * E[2] - 1; p[4] = E[6] - p[0] * E[5] - p[1] * E[4] - p[2] * E[3] - p[3] * E[2] - 1; p[5] = 1 - (p[0] + p[1] + p[2] + p[3] + p[4]); } void solve() { int N; cin >> N; vector<double> dp(N + 10); dp[N] = 0; rep(i, N) { auto ti = N - 1 - i; double u = 0; rep(j, 6) { u += dp[ti + j + 1] * p[j]; } u += 1; dp[ti] = u; } printf("%.15f\n", dp[0]); } int main() { setup(); int T; cin >> T; rep(i, T) solve(); return 0; }