結果
問題 | No.76 回数の期待値で練習 |
ユーザー | ohuton_labo |
提出日時 | 2014-12-12 01:05:07 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,388 bytes |
コンパイル時間 | 806 ms |
コンパイル使用メモリ | 64,996 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-11 20:55:18 |
合計ジャッジ時間 | 1,681 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ソースコード
#include <iostream> #include <stack> #include <string> #include <vector> #include <queue> #include <algorithm> #include <stdlib.h> using namespace std; /* cin.ignore(); getline(cin,dataStr); data = new int[n]; stringToInteger(&dataStr,data,n); */ void stringToInteger(string *str,int *data,int n){ for(int i=0;i<n;i++){ int spaceN = str->find(' ',0); data[i] = atoi(str->substr(0,spaceN).c_str()); str->erase(0,spaceN+1); } } void dPrint(double *a,int n){ for(int i=0;i<n;i++){ cout<<a[i]<<endl; } cout<<endl; } //dp[i] i:iが出るまでに振る回数の期待値 double dp[100010]; int main(){ dp[1] = 1.0000000000000000; dp[2] = 1.0833333333333333; dp[3] = 1.2569444444444444; dp[4] = 1.5353009259259260; dp[5] = 1.6915991512345676; dp[6] = 2.0513639724794235; dPrint(dp,7); double p[7]; p[1] = dp[2]-1; for(int i=2;i<6;i++){ double r = dp[i+1]-1; for(int j=1;j<i;j++){ r-=dp[j]*p[i-j]; } p[i] = r; } p[1]=1.0/12.0; p[2]=2.0/12.0; p[3]=3.0/12.0; p[4]=1.0/12.0; p[5]=3.0/12.0; p[6]=2.0/12.0; for(int i=7;i<=100000;i++){ for(int j=i-6;j<i;j++){ //cout<<j<<" "<<dp[j]<<" "<<p[i-j]<<endl; dp[i]+=dp[j]*p[i-j]; } dp[i]+=1; } int t; cin>>t; for(int i=0;i<t;i++){ int num; cin>>num; cout<<dp[num]<<endl; } return 0; }