結果
| 問題 |
No.76 回数の期待値で練習
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-08-28 08:20:24 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 754 ms / 5,000 ms |
| コード長 | 1,341 bytes |
| コンパイル時間 | 4,069 ms |
| コンパイル使用メモリ | 252,476 KB |
| 最終ジャッジ日時 | 2025-01-31 06:38:35 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 |
ソースコード
#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;
}