#include using namespace std; #include using namespace atcoder; // using mint = modint1000000007; // using mint = modint998244353; typedef long long ll; #define int long long #define rep(i,n) for (int i = 0; i < (int)(n); ++i) #define nrep(i,n) for (int i = 1; i <= (int)(n); ++i) #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define bit(n,k) ((n>>k)&1) /*nのk bit目*/ #define pop_count(x) __builtin_popcountll(x) using P = pair; #define INF 1001001001 #define LINF ((1LL<<61)-1) #define endl "\n" #define exist(v, x) ((v).find(x) != v.end()) #define argsort(v) sort(xy.begin(), xy.end(), [](const auto &p1, const auto &p2) { return atan2l(p1.second, p1.first) < atan2l(p2.second, p2.first);}) template inline bool chmax(T& a, T b){ if(a inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; } /* DEBUG */ #define debug_bar cerr << "\033[36m" << "----------------------------------------\n" << "\033[m"; #define debug_header cerr << "\033[36m" << "[" << __FUNCTION__ << ":" << __LINE__ << "] " << "\033[m"; #define debug(...) do { debug_header; cerr << "\033[36m" << #__VA_ARGS__ << " = "; view(__VA_ARGS__); cerr << '\n' << "\033[m"; } while (0) #define debug2(vv) do { debug_header; cerr << "\033[36m" << #vv << " = [\n"; view2d(vv); cerr << " ]\n" << "\033[m"; } while (0) #define debug3(vvv) do { debug_header; cerr << "\033[36m" << #vvv << " = [\n"; view3d(vvv); cerr << " ]\n" << "\033[m"; } while (0) void view() {} void view(const ll& a) { if (abs(a) == LINF) { cerr << "+-"[signbit(a)] << "LINF"; } else { cerr << a; } } template void view(const T& a) { cerr << a; } template void view(const vector& v){ cerr << "["; for (int i = 0; i < (int)v.size(); i++) { if (i) { cerr << ", "; } view(v[i]); } cerr << "]"; } template void view(const vector>& vv){ cerr << "["; for (int i = 0; i < (int)vv.size(); i++) { if (i) { cerr << ", "; } view(vv[i]); } cerr << "]"; } template void view(const map& mp){ cerr << "["; for (auto it = mp.begin(); it != mp.end(); it++) { if (it != mp.begin()) { cerr << ", "; } cerr << "("; view(it->first); cerr << ", "; view(it->second); cerr << ")"; } cerr << "]"; } template void view2d(const vector>& vv){ for (int i = 0; i < (int)vv.size(); i++) { cerr << " "; view(vv[i]); cerr << ",\n"; } } template void view3d(const vector>>& vvv) { for (int i = 0; i < (int)vvv.size(); i++) { for (int j = 0; j < (int)vvv[i].size(); j++) { cerr << " " << " ["[j == 0]; view(vvv[i][j]); if (j == (int)vvv[i].size() - 1) { cerr << "]"; } cerr << ",\n"; } if (i < (int)vvv.size() - 1) { cerr << "\n"; } } } /* 出力 */ // template inline void print(const vector& v, string s = " ") { rep(i, v.size()) cout << v[i] << (i != (int)v.size()-1 ? s : "\n"); } template inline void print(const vector& v, string s = " ") { rep(i, v.size()) cout << v[i] << (i != (int)v.size()-1 ? s : " \n"); } template inline void print(const pair& p) { cout << p.first << " " << p.second << endl; } template inline void print(const T& x) { cout << x << "\n"; } inline void print(double x) { printf("%.15f\n", x); } inline void print(bool x) { cout << (x ? "Yes" : "No") << "\n"; } int32_t main() { int n; cin >> n; vector a(n); rep(i, n) cin >> a[i]; sort(all(a)); vector b(n); rep(i, n) cin >> b[i]; sort(all(b)); double ans = 0; double cnt = 0; do { do { cnt += 1; int nowa = 0, nowb = 0; rep(i, n) { if(a[i] > b[i]) nowa++; else if(a[i] < b[i]) nowb++; } if(nowa > nowb) ans += 1; } while(next_permutation(all(b))); } while(next_permutation(all(a))); print(ans / cnt); }