結果
| 問題 |
No.75 回数の期待値の問題
|
| ユーザー |
startcpp
|
| 提出日時 | 2014-11-24 00:30:37 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,418 bytes |
| コンパイル時間 | 596 ms |
| コンパイル使用メモリ | 68,048 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2025-01-02 21:00:39 |
| 合計ジャッジ時間 | 1,651 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | WA * 16 |
ソースコード
//必ずk回振るとして、条件を1回以上満たした場合の数を求める。
//全体の事象の数ってどう扱えば良いんだ?(SUMの値が計算できない)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
#include<queue>
using namespace std;
long long N = 6;
long long T = 10;
int x;
long long dp[205][1005];
double f[205];
long long pwd( long long n, long long t ){
long long ans = 1;
for( long long i = 0; i < t; i++ ){
ans *= n;
}
return ans;
}
int main(){
int i,j,k;
cin >> x;
dp[0][0] = 1;
for( i = 0; i < T; i++ ){
for( j = 0; j <= x; j++ ){
for( k = 1; k <= N; k++ ){
if( j + k > x )
dp[i+1][0] += dp[i][j];
else
dp[i+1][j + k] += dp[i][j];
}
}
}
double ans = 0;
//確率分布を求めちゃえ
//dp[i][0]~dp[i][N]の総和がi回サイコロを振る場合の数。
//サイコロを振り終わるとか考えずに、最初に試そうとしている遷移が、pwd(N,T)通りあることに気が付いた。
//dp[i][x]がi回目に振った後で、振り終わる場合の数
for( i = 0; i <= T; i++ ){
long long SUM = 0;
for( j = 0; j <= x; j++ ){
SUM += dp[i][j];
}
f[i] = (double)dp[i][x]/SUM;
ans += f[i]*(double)i;
//cout << "f[" << i << "] = " << f[i] << endl;
}
cout << ans << endl;
return 0;
}
startcpp