結果
問題 | No.76 回数の期待値で練習 |
ユーザー | myanta |
提出日時 | 2017-05-30 01:14:50 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 44 ms / 5,000 ms |
コード長 | 1,206 bytes |
コンパイル時間 | 491 ms |
コンパイル使用メモリ | 41,856 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-21 18:17:26 |
合計ジャッジ時間 | 980 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 44 ms
5,248 KB |
testcase_01 | AC | 44 ms
5,376 KB |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:24:30: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 24 | scanf("%d", &n[i]); | ~~~~~^~~~~~~~~~~~~
ソースコード
#include<cstdio> #include<vector> using namespace std; using vd=vector<long double>; using vi=vector<int>; int main(void) { vi n; vd c, p, table; int t, table_max=1000; long double r[6+1]={0.0, 0.5/6, 1.0/6, 1.5/6, 0.5/6, 1.5/6}; r[6]=1.0-r[1]-r[2]-r[3]-r[4]-r[5]; while(scanf("%d", &t)==1) { n.resize(t); for(int i=0;i<t;i++) { scanf("%d", &n[i]); } table.assign(table_max+2, 0.0); c.assign(table_max+2, 0.0); c[0]=1.0; for(int i=1;i<=table_max;i++) { c.swap(p); c.assign(table_max+2, 0.0); for(int j=i-1;j<table_max && j<=(i-1)*6;j++) { for(int k=1;k<=6;k++) { int idx=j+k; if(idx>table_max+1) idx=table_max+1; c[idx]+=p[j]*r[k]; for(int l=j+1;l<=idx;l++) { table[l]+=p[j]*r[k]*i; } } } } // for(auto&te:table) printf("%.8f\n", (double)te); // for(int i=0;i<t;i++) printf("%4d %.8f\n", n[i], (double)ans[i]); // for(auto anse:ans) printf("%.8f\n", (double)anse); for(int i=0;i<t;i++) { long double ans; if(n[i]<=table_max) { ans=table[n[i]]; } else { int d=(n[i]-table_max)/90+1; ans=table[n[i]-d*90]+24*d; } printf("%.8f\n", (double)ans); } } return 0; }