結果
問題 | 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; }