結果
問題 | No.425 ジャンケンの必勝法 |
ユーザー |
![]() |
提出日時 | 2016-09-25 03:00:23 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 551 ms / 2,000 ms |
コード長 | 1,173 bytes |
コンパイル時間 | 684 ms |
コンパイル使用メモリ | 90,068 KB |
実行使用メモリ | 280,272 KB |
最終ジャッジ日時 | 2024-11-18 11:12:05 |
合計ジャッジ時間 | 2,349 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 18 |
ソースコード
/* -*- coding: utf-8 -*-** 425.cc: No.425 ジャンケンの必勝法 - yukicoder*/#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<string>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<deque>#include<algorithm>#include<numeric>#include<utility>#include<complex>#include<functional>using namespace std;/* constant */const double DELTA = 1e-8;/* typedef */typedef pair<double,double> pdd;/* global variables *//* subroutines *//* main */int main() {double p, q;cin >> p >> q;p /= 100, q /= 100;double wp = 1.0 / 3, lp = 1.0 / 3;queue<pdd> qq;qq.push(pdd(1.0 / 3, p));while (wp + lp < 1.0 - DELTA && ! qq.empty()) {pdd u = qq.front(); qq.pop();double &ud = u.first, &up = u.second;// usedouble d0 = ud * up / 2;if (d0 > 0.0) {wp += d0;qq.push(pdd(d0, max(up - q, 0.0)));}// do not usedouble d1 = ud * (1.0 - up) / 3;if (d1 > 0.0) {wp += d1;lp += d1;qq.push(pdd(d1, min(up + q, 1.0)));}}printf("%.7lf\n", wp);return 0;}