結果
問題 | No.425 ジャンケンの必勝法 |
ユーザー |
|
提出日時 | 2016-11-12 10:19:05 |
言語 | D (dmd 2.109.1) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 757 bytes |
コンパイル時間 | 2,700 ms |
コンパイル使用メモリ | 161,036 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-12 05:04:12 |
合計ジャッジ時間 | 3,482 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 18 |
ソースコード
import std.stdio;import std.array;import std.string;import std.conv;import std.algorithm;import std.typecons;import std.range;import std.random;import std.math;import std.container;import std.numeric;double[Tuple!(int, int)] mem;int P_init, Q;double rec(int p, int depth){if (depth >= 20)return 1.0;if (tuple(p, depth) in mem)return mem[tuple(p, depth)];mem[tuple(p, depth)] = p / 200.0 + (100-p) / 300.0+ p / 200.0 * rec(max(p-Q, 0), depth+1)+ (100-p) / 300.0 * rec(min(p+Q, 100), depth+1);return mem[tuple(p, depth)];}void main() {auto input = readln.split.map!(to!int);P_init = input[0];Q = input[1];writef("%.07f", 1.0/3 + rec(P_init, 0) / 3.0);}