結果
| 問題 |
No.173 カードゲーム(Medium)
|
| コンテスト | |
| ユーザー |
古寺いろは
|
| 提出日時 | 2015-03-26 23:48:22 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,515 bytes |
| コンパイル時間 | 1,343 ms |
| コンパイル使用メモリ | 164,632 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-29 01:09:19 |
| 合計ジャッジ時間 | 20,758 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 TLE * 1 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
bool usedA[20];
bool usedB[20];
int MAX = 1000;
int main() {
int N;
double PA, PB;
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 count = 0;
int loop = 800000;
for (int t = 0; t < loop; t++)
{
for (int i = 0; i < N; i++)
{
usedA[i] = usedB[i] = false;
}
int score = 0;
for (int i = 0; i < N; i++)
{
int chooseA = 0;
double p = PA;
double p2 = 0;
double nokori = 1;
if (i == N - 1) p = 1;
else p2 = (1 - PA) / (N - 1 - i);
for (int j = 0; j < N; j++)
{
if (usedA[j]) continue;
chooseA = j;
if ((rand() % MAX) / (double)MAX < p / nokori){
break;
}
nokori -= p;
p = p2;
}
int chooseB = 0;
p = PB;
p2 = 0;
nokori = 1;
if (i == N - 1) p = 1;
else p2 = (1 - PB) / (N - 1 - i);
for (int j = 0; j < N; j++)
{
if (usedB[j]) continue;
chooseB = j;
if ((rand() % MAX) / (double)MAX < p / nokori){
break;
}
nokori -= p;
p = p2;
}
//cout << chooseA << " " << chooseB << " " << (rand()%MAX) << endl;
//cin >> score;
if (A[chooseA] > B[chooseB]) score += A[chooseA] + B[chooseB];
if (A[chooseA] < B[chooseB]) score -= A[chooseA] + B[chooseB];
usedA[chooseA] = usedB[chooseB] = true;
}
if (score > 0) count += 1;
}
printf("%.14f", count / loop);
cin >> count;
}
古寺いろは