結果

問題 No.173 カードゲーム(Medium)
ユーザー tkzw_21tkzw_21
提出日時 2015-03-27 10:33:30
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 455 ms / 3,000 ms
コード長 1,113 bytes
コンパイル時間 1,733 ms
コンパイル使用メモリ 165,332 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-06-29 01:25:07
合計ジャッジ時間 5,123 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 11 ms
6,812 KB
testcase_01 AC 33 ms
6,944 KB
testcase_02 AC 406 ms
6,940 KB
testcase_03 AC 397 ms
6,944 KB
testcase_04 AC 388 ms
6,940 KB
testcase_05 AC 348 ms
6,944 KB
testcase_06 AC 296 ms
6,940 KB
testcase_07 AC 270 ms
6,948 KB
testcase_08 AC 269 ms
6,944 KB
testcase_09 AC 455 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

//div2 hard,indeedNow D
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
typedef long long ll;
const int INF = 1e9;

mt19937 mt;
uniform_real_distribution<double> dist_real( 0.0, 1.0 );
double pa,pb;
bool sim(int n,vector<int>a,vector<int>b){
	int pta=0,ptb=0;
	int sela,selb;

	while(n){
		if(dist_real(mt) <= pa || n == 1){
			sela = 0;
		}else{
			sela = mt()%(n-1)+1;
		}

		if(dist_real(mt) <= pb || n == 1){
			selb = 0;
		}else{
			selb = mt()%(n-1)+1;
		}
		if(a[sela] > b[selb])pta += a[sela]+b[selb];
		else ptb += a[sela]+b[selb];

		a[sela] = 100001;
		b[selb] = 100001;
		sort(a.begin(),a.end());
		sort(b.begin(),b.end());

		n--;
	}
	//cout << pta << " " << ptb << endl;
	if(pta > ptb)return true;
	else return false;
}

int main(void) {
	int n;
	cin >> n >> pa >> pb;
	vector<int> a(n),b(n);
	for(int i=0;i<n;i++)
		cin >> a[i];
	for(int i=0;i<n;i++)
		cin >> b[i];

	sort(a.begin(),a.end());
	sort(b.begin(),b.end());

	double cnt = 0;
	int MAX_N = 1e5;
	for(int i=0;i<MAX_N;i++){
		if(sim(n,a,b))cnt++;
	}
	cout << fixed << setprecision(10) << cnt/MAX_N << endl;
	return 0;
}
0