結果
| 問題 |
No.425 ジャンケンの必勝法
|
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 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;
// use
double d0 = ud * up / 2;
if (d0 > 0.0) {
wp += d0;
qq.push(pdd(d0, max(up - q, 0.0)));
}
// do not use
double 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;
}
tnakao0123