func_code_string: #include <bits/stdc++.h>   using namespace std;   using namespace std::chrono;   template <class e, class t, int N>   std::basic_istream<e, t>& operator>>(std::basic_istream<e, t>& in,                                        const e (&literal)[N]) {     std::array<e, N - 1> buffer;     in >> buffer[0];     if (N > 2) in.read(&buffer[1], N - 2);     if (strncmp(&buffer[0], literal, N - 1))       in.setstate(in.rdstate() | std::ios::badbit);     return in;   }   template <class e, class t>   std::basic_istream<e, t>& operator>>(std::basic_istream<e, t>& in,                                        const e& literal) {     e buffer;     in >> buffer;     if (buffer != literal) in.setstate(in.rdstate() | std::ios::badbit);     return in;   }   template <class e, class t, int N>   std::basic_istream<e, t>& operator>>(std::basic_istream<e, t>& in,                                        e (&carray)[N]) {     return std::operator>>(in, carray);   }   template <class t1, class t2>   istream& operator>>(istream& in, pair<t1, t2>& p) {     in >> p.first >> p.second;     return in;   }   template <class t>   istream& operator>>(istream& in, vector<t>& v) {     for (int i = 0; i < v.size(); i++) {       in >> v[i];     }     return in;   }   template <class t>   ostream& operator<<(ostream& out, vector<t>& a) {     for (auto x : a) {       out << x <<    ;     }     return out;   }   template <class t1, class t2>   ostream& operator<<(ostream& out, map<t1, t2>& a) {     for (auto x : a) {       out << x <<    ;     }     return out;   }   template <class t>   ostream& operator<<(ostream& out, set<t>& a) {     for (auto x : a) {       out << x <<    ;     }     return out;   }   template <class t1, class t2>   ostream& operator<<(ostream& out, const pair<t1, t2>& a) {     out << a.first <<     << a.second;     return out;   }   template <class t1, class t2>   pair<t1, t2> operator+(const pair<t2, t1>& a, const pair<t1, t2>& b) {     return {a.first + b.first, a.second + b.second};   }   template <class t1, class t2>   pair<t1, t2> operator-(const pair<t2, t1>& a, const pair<t1, t2>& b) {     return {a.first - b.first, a.second - b.second};   }   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }   long long fpow(long long b, long long e, long long m = (long long)(1e9 + 7)) {     long long r = 1;     while (e) {       if (e & 1) r = (r * b) % m;       e >>= 1;       b = (b * b) % m;     }     return r;   }   long long n, m;   vector<long long> a;   long long c[100][100];   long double dp[100][100][100];   void init() {     for (long long i = 0; i < (long long)60; i++)       for (long long j = 0; j < (long long)60; j++)         for (long long k = 0; k < (long long)70; k++) dp[i][j][k] = -2;     for (long long i = 0; i < (long long)51; i++) {       for (long long j = 0; j < (long long)51; j++) {         if (j == 0)           c[i][j] = 1;         else if (i == 0)           c[i][j] = 0;         else           c[i][j] = c[i - 1][j - 1] + c[i - 1][j];       }     }   }   long double solve(long long i, long long k, long long mx) {     if (i == m) return (!k ? mx : 0);     long double& r = dp[i][k][mx];     if (r > -1) return r;     long double p = 1;     r = 0;     for (long long j = 0; j < (long long)k + 1; j++) {       long long len = (j + a[i] - 1) / a[i];       r += (c[k][j] * p * solve(i + 1, k - j, max(mx, len)));       p /= m;     }     return r;   }   int32_t main(int32_t argc, char const* argv[]) {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     ;     cin >> n >> m;     a.resize(m);     cin >> a;     init();     cout << setprecision(15) << solve(0, n, 0) <<   n ;     return 0;   }   