#include #define rep(i, n) for (int (i) = 0; (i) < (int)(n); (i)++) const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; const int MAXN = 20; double dp[2][1<> N >> p[0] >> p[1]; 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); dp[0][(1<= 1; s--) { bool first = true; int cnt = __builtin_popcount(s); for (int i = 0; i < N; i++) { if ((s>>i)&1) first = false; else { if (first) dp[j][s] += dp[j][s|(1<>i)&1) { if (cnt == 1) dpdp[j][N-cnt][i] += dp[j][s]; else { if (first) { first = false; dpdp[j][N-cnt][i] += dp[j][s] * p[j]; } else { dpdp[j][N-cnt][i] += dp[j][s] * (1-p[j])/(cnt-1); } } } } } } double ans = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { if (A[j] > B[k]) { ans += (A[j]+B[k]) * dpdp[0][i][j] * dpdp[1][i][k]; } } } } printf("%.15lf\n", ans); return 0; }