#include #include #include #include #include #include #include const int MAX_GAME = 1e6; using namespace std; int choice(int nn, int p) { if (nn == 1) { return 0; } if (rand() % 1000 < p) { return 0; } return rand() % (nn - 1) + 1; } int main() { int n, pa, pb; double pad, pbd; cin >> n >> pad >> pbd; pa = pad * 1000; pb = pbd * 1000; vector a(n, 0), b(n, 0); 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()); srand(0); int point; int idx_a, idx_b, num_a, num_b; int win_a = 0, win_b = 0; for (int i = 0; i < MAX_GAME; i++) { auto aa = a, bb = b; point = 0; for (int j = n; j > 0; j--) { idx_a = choice(j, pa); idx_b = choice(j, pb); num_a = aa[idx_a]; num_b = bb[idx_b]; aa.erase(aa.begin() + idx_a); bb.erase(bb.begin() + idx_b); point += (num_a > num_b) ? num_a + num_b : -(num_a + num_b); } if (point > 0) { win_a++; } else if (point > 0) { win_b++; } } printf("%f\n", 1.0 * win_a / MAX_GAME); return 0; }