Advertisement
Stepavly

timus1887

Jun 25th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC target("tune=native")
  3. #pragma GCC optimize("fast-math,unroll-loops")
  4.  
  5. #include <math.h>
  6. #include <algorithm>
  7. #include <set>
  8. #include <iostream>
  9. #include <vector>
  10. #include <queue>
  11. #include <map>
  12. #include <string>
  13. #include <time.h>
  14. #include <cassert>
  15. #include <functional>
  16. #include <memory.h>
  17. #include <stack>
  18. #include <bitset>
  19. #include <unordered_map>
  20. #include <unordered_set>
  21. #include <random>
  22. #include <chrono>
  23. #include <complex>
  24. #include <fstream>
  25. #include <climits>
  26. using namespace std;
  27.  
  28. typedef unsigned long long ull;
  29. typedef long long ll;
  30. typedef unsigned u;
  31. typedef long double ld;
  32. typedef vector<vector<int>> vvi;
  33. typedef unsigned char uc;
  34. typedef unsigned short us;
  35. typedef complex<double> cd;
  36.  
  37. #define INF 1000000000
  38. #define LLINF 1000000000000000000LL
  39. #define EPS 1e-9l
  40. #define pii pair<int, int>
  41.  
  42. const int DEBUG = 0;
  43.  
  44. mt19937 gen((u)chrono::high_resolution_clock::now().time_since_epoch().count());
  45.  
  46. #pragma comment(linker, "/STACK:16777216")
  47.  
  48. const int ITER = 50000;
  49.  
  50. ld prob[26][11];
  51. int a[26];
  52. int b[26];
  53. int c[26];
  54. ld p[10];
  55. ld dp[2][1 << 10];
  56.  
  57. int main()
  58. {
  59.     ios_base::sync_with_stdio(0);
  60.     cin.tie(0);
  61.     cout.setf(cout.fixed);
  62.     cout.precision(12);
  63.     auto START_TIME = chrono::high_resolution_clock::now();
  64.  
  65.     int n;
  66.     cin >> n;
  67.  
  68.     for (int i = 1; i <= n; i++)
  69.         cin >> a[i];
  70.  
  71.     for (int i = 1; i <= n; i++)
  72.         cin >> b[i];
  73.  
  74.     for (int i = 1; i <= n; i++)
  75.         cin >> c[i];
  76.  
  77.     prob[0][1] = 1;
  78.  
  79.     for (int len = 0; len < n; len++)
  80.     {
  81.         for (int mult = 0; mult < 11; mult++)
  82.         {
  83.             for (int dig = 0; dig < 10; dig++)
  84.             {
  85.                 int add = (a[len + 1] * dig * dig + b[len + 1] * dig + c[len + 1]) % 11;
  86.                 add = (add * mult) % 11;
  87.  
  88.                 prob[len + 1][add] += prob[len][mult] / 10;
  89.             }
  90.         }
  91.     }
  92.  
  93.     for (int i = 0; i < 11; i++)
  94.         p[i % 10] += prob[n][i];
  95.  
  96.     for (int i = 0; i < 10; i++)
  97.     {
  98.         if (p[i] < 1e-8)
  99.         {
  100.             cout << -1;
  101.             return 0;
  102.         }
  103.     }
  104.  
  105.     dp[0][0] = 1;
  106.     ld res = 0;
  107.  
  108.     for (int i = 0; i + 1 < ITER; i++)
  109.     {
  110.         res += i * dp[i % 2][(1 << 10) - 1];
  111.  
  112.         for (int mask = 0; mask < (1 << 10) - 1; mask++)
  113.         {
  114.             if (dp[i % 2][mask] > 1e-10)
  115.             {
  116.                 for (int dig = 0; dig < 10; dig++)
  117.                 {
  118.                     dp[(i + 1) % 2][mask | (1 << dig)] += dp[i % 2][mask] * p[dig];
  119.                 }
  120.             }
  121.         }
  122.  
  123.         fill(dp[i % 2], dp[i % 2] + (1 << 10), 0);
  124.     }
  125.  
  126.     cout << res;
  127.  
  128. #ifdef LOCAL
  129.     cerr.precision(3);
  130.     cerr << "\nWorking time: " << chrono::duration<double>(chrono::high_resolution_clock::now() - START_TIME).count() << " sec.";
  131. #endif
  132.  
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement