結果
| 問題 | No.76 回数の期待値で練習 |
| コンテスト | |
| ユーザー |
myanta
|
| 提出日時 | 2017-05-30 01:14:50 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 |
コンパイルメッセージ
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;
}
myanta