#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // ascending order #define vsort(v) sort(v.begin(), v.end()) // descending order #define vsort_r(v) sort(v.begin(), v.end(), greater()) #define vunique(v) v.erase(unique(v.begin(), v.end()), v.end()) #define mp make_pair #define ts(x) to_string(x) #define rep(i, a, b) for(int i = (int)a; i < (int)b; i++) #define repm(i, a, b) for(int i = (int)a; i > (int)b; i--) #define bit(a) bitset<8>(a) #define des_priority_queue priority_queue, greater > typedef long long ll; typedef pair P; const ll INF = 1e18; #define MAX_V 1000000 #define MAX_N 10 int n; int a[MAX_N], b[MAX_N]; int main(){ cin.tie(0); ios::sync_with_stdio(false); cin >> n; rep(i, 0, n) cin >> a[i]; rep(i, 0, n) cin >> b[i]; int array1[n], array2[n]; rep(i, 0, n) { array1[i] = i; array2[i] = i; } int cntA = 0, cntB = 0, cntDraw = 0; do { do { int winA = 0, winB = 0, draw = 0; rep(i, 0, n) { int pointA = a[array1[i]], pointB = b[array2[i]]; if(pointA > pointB) ++winA; else if(pointA < pointB) ++winB; else ++draw; } if(winA > winB) ++cntA; else if(winA < winB) ++cntB; else ++cntDraw; } while(next_permutation(array2, array2 + n)); } while(next_permutation(array1, array1 + n)); double rsl = cntA / (cntA + cntB + cntDraw + 0.0); cout << rsl << endl; }