Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. /*
  2.  
  3.  
  4.                           |~~~~~~~|
  5.                           |       |
  6.                           |       |
  7.                           |       |
  8.                           |       |
  9.                           |       |
  10. |~.\\\_\~~~~~~~~~~~~~~xx~~~         ~~~~~~~~~~~~~~~~~~~~~/_//;~|
  11. |  \  o \_         ,XXXXX), поллард сука            _..-~ o /  |
  12. |    ~~\  ~-.     XXXXX`)))),                 _.--~~   .-~~~   |
  13. ~~~~~~~`\   ~\~~~XXX' _/ ';))     |~~~~~~..-~     _.-~ ~~~~~~~
  14.          `\   ~~--`_\~\, ;;;\)__.---.~~~      _.-~
  15.            ~-.       `:;;/;; \          _..-~~
  16.               ~-._      `''        /-~-~
  17.                   `\            /  /
  18.                     |         ,   | |
  19.                      |  '        /  |
  20.                       \/;           |
  21.                        ;;           |
  22.                        `;   .       |
  23.                        |~~~-----.....|
  24.                       | \             \
  25.                      | /\~~--...__    |
  26.                      (|  `\       __-\|
  27.                      ||    \    /~    |
  28.                      |)     \~-'      |
  29.                       |      | \      '
  30.                       |      |  \    :
  31.                        \     |  |    |
  32.                         |    )  (    )
  33.                          \  /;  /\  |
  34.                          |    |/   |
  35.                          |    |   |
  36.                           \  .'  ||
  37.                           |  |  | |
  38.                           (  | |  |
  39.                           |   \ \ |
  40.                           || o `.)|
  41.                           |`\\\\) |
  42.                           |       |
  43.                           |       |
  44.                           |       |
  45. */
  46.  
  47.  
  48. #include <bits/stdc++.h>
  49.  
  50. #pragma GCC optimize("Ofast")
  51. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
  52. #pragma GCC optimize ("unroll-loops")
  53.  
  54. using namespace std;
  55.  
  56. #define TASK "tree"
  57.  
  58. typedef long long ll;
  59. typedef long double ld;
  60. typedef pair<ll, ll> par;
  61. typedef unsigned int ui;
  62.  
  63. #define all(x) (x).begin(), (x).end()
  64. #define rall(x) (x).rbegin(), (x).rend()
  65. #define X first
  66. #define Y second
  67. #define pw(x) (1ll << (x))
  68. #define _ inline
  69.  
  70. mt19937 rnd(17);
  71.  
  72. const ll INF = 1e18;
  73. const ll MOD = 786433;
  74. const double EPS = 1e-12;
  75. const double PI = acosl(-1);
  76.  
  77. const int L = 16;
  78. const int N = pw(L);
  79.  
  80. const int ROOT = 3;
  81.  
  82. ll angles[N + 1];
  83. int bitrev[N];
  84.  
  85. void init() {
  86.     angles[0] = 1;
  87.     for (int i = 1; i <= N; ++i) angles[i] = angles[i - 1] * ROOT % MOD;
  88.     for (int i = 0; i < N; ++i) {
  89.         int x = i;
  90.         for (int j = 0; j < L; ++j) {
  91.             bitrev[i] = (bitrev[i] << 1) | (x & 1);
  92.             x >>= 1;
  93.         }
  94.     }
  95. }
  96.  
  97. inline int revBit(int x, int len) {
  98.     return bitrev[x] >> (L - len);
  99. }
  100.  
  101. void fft(vector<ll>&a, bool inverse = false) {
  102.     int n = a.size();
  103.     int l = __builtin_ctz(n);
  104.     for (int i = 0; i < n; ++i) {
  105.         int j = revBit(i, l);
  106.         if (i < j) {
  107.             swap(a[i], a[j]);
  108.         }
  109.     }
  110.     for (int len = 1; len < n; len *= 2) {
  111.         for (int start = 0; start < n; start += 2 * len) {
  112.             for (int i = 0; i < len; ++i) {
  113.                 ll x = a[start + i], y = a[start + len + i];
  114.                 int idx = N / 2 / len * i;
  115.                 ll w = angles[inverse ? N - idx : idx];
  116.                 w = w * y % MOD;
  117.                 a[start + i] = x + w;
  118.                 if (a[start + i] >= MOD) a[start + i] -= MOD;
  119.                 a[start + len + i] = x - w;
  120.                 if (a[start + len + i] < 0) a[start + len + i] += MOD;
  121.             }
  122.         }
  123.     }
  124.  
  125.     if (inverse) {
  126.         int rev_deg = 1;
  127.         for (int i = 0; i < l; ++i) rev_deg = (rev_deg % 2) ? ((rev_deg + MOD) / 2) : (rev_deg / 2);
  128.         for (auto& x : a) x = x * rev_deg % MOD;
  129.     }
  130. }
  131.  
  132. vector<ll> ar(N, 0), br(N, 0);
  133.  
  134. //dp[h][n] = 2 * sum(dp[h - 1][n - i - 1] * dp[h - 1][i]) + sum(dp[h - 2][n - i - 1] * dp[h - 1][i]) + sum(dp[h - 1][n - i - 1] * dp[h - 2][i]);
  135.  
  136. void f(ll k) {
  137.     ar[1] = 1;
  138.     br[0] = 1;
  139.     fft(ar);
  140.     fft(br);
  141.     for (int kk = 0; kk < k; ++kk) {
  142.         for (int i = 0; i < N; ++i) {
  143.             br[i] = ((((2 * br[i] + ar[i]) % MOD) * ar[i] % MOD) % MOD * angles[i]) % MOD;
  144.         }
  145.         ar.swap(br);
  146.     }
  147.     fft(ar, true);
  148. }
  149.  
  150. int source() {
  151.     init();
  152.     ll n, k;
  153.     cin >> n >> k;
  154.     f(k);
  155.     cout << ar[n];
  156.     return 0;
  157. }
  158.  
  159. int main() {
  160. #ifdef aokiga
  161.     assert(freopen("input.txt", "r", stdin));
  162.     assert(freopen("output.txt", "w", stdout));
  163. #else
  164.     //freopen(TASK".in", "r", stdin);
  165.     //freopen(TASK".out", "w", stdout);
  166. #endif
  167.  
  168.     srand(17);
  169.     ios::sync_with_stdio(0);
  170.     cin.tie(0);
  171.     cout.tie(0);
  172.  
  173.     source();
  174.  
  175. #ifdef aokiga
  176.     cerr << "TIME :: " << clock() * 1.0 / CLOCKS_PER_SEC;
  177. #endif
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement