結果
問題 | No.173 カードゲーム(Medium) |
ユーザー |
![]() |
提出日時 | 2020-10-23 16:03:34 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 455 ms / 3,000 ms |
コード長 | 1,188 bytes |
コンパイル時間 | 1,252 ms |
コンパイル使用メモリ | 93,340 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-21 10:17:21 |
合計ジャッジ時間 | 4,784 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
#include<iostream>#include<set>#include<random>using namespace std;uniform_real_distribution<> dist(0.0, 1.0);int op(double p, set<int> &a, mt19937 &engine){int ret;if(a.size() == 1 || dist(engine) <= p){ret = *a.begin();a.erase(a.begin());}else{uniform_int_distribution<> tmp(1, a.size()-1);int pos = tmp(engine);auto it = a.begin();while(pos--) it++;ret = *it;a.erase(it);}return ret;}int main(){int n;double pa, pb;cin >> n >> pa >> pb;set<int> ga, gb;int x;for(int i = 0; i < n; i++) cin >> x, ga.insert(x);for(int i = 0; i < n; i++) cin >> x, gb.insert(x);random_device rd;mt19937 engine(rd());double win = 0;for(int loop = 0; loop < 100000; loop++){set<int> a = ga, b = gb;int diff = 0;for(int i = 0; i < n; i++){int aval = op(pa, a, engine);int bval = op(pb, b, engine);if(aval > bval) diff += aval+bval;if(aval < bval) diff -= aval+bval;}if(diff > 0) win++;}cout << win/100000 << endl;return 0;}