#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int MAXN = 22; int N; double pa, pb; int A[MAXN], B[MAXN]; double dpa[MAXN][MAXN], dpb[MAXN][MAXN]; void dfsa(int cur, int s, double p) { if (cur == N-1) { for (int i = 0; i < N; i++) { if ((s>>i)&1) { dpa[i][cur] += p; break; } } return; } bool first = false; int cnt = __builtin_popcount(s); for (int i = 0; i < N; i++) { if ((s>>i)&1) { if (!first) { dpa[i][cur] += p*pa; first = true; dfsa(cur+1, s^(1<>i)&1) { dpb[i][cur] += p; break; } } return; } bool first = false; int cnt = __builtin_popcount(s); for (int i = 0; i < N; i++) { if ((s>>i)&1) { if (!first) { dpb[i][cur] += p*pb; first = true; dfsb(cur+1, s^(1<> N >> pa >> pb; for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i < N; i++) cin >> B[i]; sort(A, A+N); sort(B, B+N); dfsa(0, (1< B[k]) ans += dpa[j][i] * dpb[k][i] * (A[j]+B[k]); } } } printf("%.10lf\n", ans); return 0; }