結果
| 問題 |
No.425 ジャンケンの必勝法
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-09-23 18:16:52 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 653 bytes |
| コンパイル時間 | 1,129 ms |
| コンパイル使用メモリ | 159,040 KB |
| 実行使用メモリ | 16,968 KB |
| 最終ジャッジ日時 | 2024-11-17 19:36:42 |
| 合計ジャッジ時間 | 55,291 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 1 TLE * 4 |
| other | AC * 3 WA * 3 TLE * 12 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define REP(i,b) FOR(i,0,b)
#define INF 1e9
#define MAX_N 100000
#define MAX_M 100000
using ll = long long;
const ll mod = LLONG_MAX;
bool memo[51];
double ans[101][51];
int a,b;
double dfs(int p,int d){
if(d<0)return 0;
if(memo[d]){
return ans[101][21];
}
double way1,way2;
double np=p/100.0;
way1=np/2.0+np/2.0*dfs(max(0,p-b),d-1);
way2=(1.0-np)/3.0+(1.0-np)/3.0*dfs(min(100,p+b),d-1);
memo[p]=true;
return ans[p][d] =way1+way2;
}
int main(){
cin>>a>>b;
cout<<fixed<<setprecision(10)<<1.0 / 3.0 + 1.0 / 3.0 * dfs(a, 50)<<endl;
}