結果
問題 | No.173 カードゲーム(Medium) |
ユーザー | face4 |
提出日時 | 2019-12-06 15:13:00 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 386 ms / 3,000 ms |
コード長 | 1,188 bytes |
コンパイル時間 | 718 ms |
コンパイル使用メモリ | 93,580 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-02 10:03:36 |
合計ジャッジ時間 | 3,680 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 8 ms
6,816 KB |
testcase_01 | AC | 31 ms
6,944 KB |
testcase_02 | AC | 339 ms
6,940 KB |
testcase_03 | AC | 341 ms
6,940 KB |
testcase_04 | AC | 326 ms
6,940 KB |
testcase_05 | AC | 284 ms
6,944 KB |
testcase_06 | AC | 237 ms
6,940 KB |
testcase_07 | AC | 211 ms
6,944 KB |
testcase_08 | AC | 210 ms
6,940 KB |
testcase_09 | AC | 386 ms
6,944 KB |
ソースコード
#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; }