結果
問題 | No.301 サイコロで確率問題 (1) |
ユーザー | latte0119 |
提出日時 | 2015-11-13 23:49:26 |
言語 | C++11 (gcc 11.4.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,478 bytes |
コンパイル時間 | 1,693 ms |
コンパイル使用メモリ | 165,884 KB |
実行使用メモリ | 13,952 KB |
最終ジャッジ日時 | 2024-09-13 15:44:45 |
合計ジャッジ時間 | 5,828 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
コンパイルメッセージ
main.cpp: In function ‘void solve()’: main.cpp:47:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 47 | scanf("%lld",&N); | ~~~~~^~~~~~~~~~~ main.cpp: In function ‘int main()’: main.cpp:73:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 73 | scanf("%lld",&T); | ~~~~~^~~~~~~~~~~
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long typedef pair<int,int>pint; typedef vector<int>vint; #define pb push_back #define mp make_pair #define all(v) (v).begin(),(v).end() #define rep(i,n) for(int i=0;i<(n);i++) template<class T,class U>void chmin(T &t,U f){if(t>f)t=f;} template<class T,class U>void chmax(T &t,U f){if(t<f)t=f;} typedef vector<double>vec; typedef vector<vec>mat; mat start,K; mat mul(mat A,mat B){ mat C(A.size(),vec(B[0].size())); rep(i,C.size()){ rep(j,C[0].size()){ double val=0; rep(k,A[0].size()){ val+=A[i][k]*B[k][j]; } C[i][j]=val; } } return C; } mat mat_pow(mat A,int m){ mat ret(A.size(),vec(A.size())); rep(i,A.size())ret[i][i]=1; while(m){ if(m&1)ret=mul( A,ret); A=mul(A,A); m>>=1; } return ret; } void solve(){ int N; scanf("%lld",&N); double lb=0,ub=INT_MAX/10; rep(_,100){ double mid=(ub+lb)/2; rep(i,5)start[i+1][0]=mid; mat A=mat_pow(K,N); mat X=mul(A,start); if(X[0][0]>=mid)lb=mid; else ub=mid; } printf("%.20lf\n",(lb+ub)/2); } signed main(){ K=mat(7,vec(7)); for(int i=0;i<6;i++)K[0][i]=1.0/6.0; K[0][6]=1; for(int i=0;i<5;i++)K[i+1][i]=1; K[6][6]=1; start=mat(7,vec(1)); start[6][0]=1; int T; scanf("%lld",&T); while(T--)solve(); return 0; }