結果
| 問題 |
No.75 回数の期待値の問題
|
| ユーザー |
はまやんはまやん
|
| 提出日時 | 2017-07-28 10:35:50 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,341 bytes |
| コンパイル時間 | 1,625 ms |
| コンパイル使用メモリ | 174,716 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-10 04:45:20 |
| 合計ジャッジ時間 | 2,319 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 3 |
| other | WA * 16 |
ソースコード
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
//---------------------------------------------------------------------------------------------------
template <typename T> void gaussianElimination(vector<vector<T>> &A)
{
int N = A.size();
int M = A[0].size();
assert(N <= M);
int k = 0;
for (int i = 0; i < N; i++) {
int v = -1;
for (int j = k; j < N && v == -1; j++) {
if (A[j][i] != 0) {
v = j;
}
}
if (v == -1) continue;
//a[i] = k;
swap(A[k], A[v]);
T x = A[k][i];
for (int j = 0; j < M; j++)
A[k][j] = A[k][j] / x;
for (int j = k + 1; j < N; j++) {
for (int h = M - 1; h >= i; h--)
A[j][h] = A[j][h] - A[k][h] * A[j][i];
}
k++;
}
}
template <typename T> void print(vector<vector<T>> &A) {
int N = A.size(); int M = A[0].size();
rep(y, 0, N) {
rep(x, 0, M) cout << A[y][x] << "\t";
cout << endl;
}
}
/*---------------------------------------------------------------------------------------------------
∧_∧
∧_∧ (´<_` ) Welcome to My Coding Space!
( ´_ゝ`) / ⌒i
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ _/ .| .|____
\/____/ (u ⊃
---------------------------------------------------------------------------------------------------*/
int K;
//---------------------------------------------------------------------------------------------------
void _main() {
cin >> K;
vector<vector<double>> A(K, vector<double>(K + 1, 0));
rep(i, 0, K) {
rep(j, 1, 7) {
int next = (i + j > K) ? 0 : i + j;
A[i][K] -= 1.0 / 6;
if (i + j != K) A[i][next] += 1.0 / 6;
}
A[i][i] -= 1;
}
//print(A);
gaussianElimination(A);
//print(A);
double ans = A[0][K];
printf("%.10f\n", ans);
}
はまやんはまやん