Advertisement
Guest User

Untitled

a guest
Jan 17th, 2014
1,372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <iostream>
  2. const int MOD = (1 << 30) + 1;
  3. template <bool, typename T1, typename T2> struct myIf;
  4. template <typename T1, typename T2>
  5. struct myIf <true, T1, T2>
  6. {
  7.     typedef T1 result;
  8. };
  9. template <typename T1, typename T2>
  10. struct myIf <false, T1, T2>
  11. {
  12.     typedef T2 result;
  13. };
  14. template <int, int, int> struct dp;
  15. template <int cur_mask, int n, int m, int mask> struct metaFor
  16. {
  17.     enum {cur1 = cur_mask | mask, cur2 = (cur_mask & mask) ^ ((1 << n) - 1)};
  18.     typedef typename myIf <((cur1 | (cur1 << 1) | 1) & ((1 << n) - 1)) == (1 << n) - 1 &&
  19.     ((cur2 | (cur2 << 1) | 1) & ((1 << n) - 1)) == (1 << n) - 1,
  20.         dp <n, m - 1, cur_mask>,
  21.         metaFor <-1, n, m, mask>
  22.     >::result add;
  23.     enum {ans = (metaFor <cur_mask - 1, n, m, mask>::ans * 1ll + add::ans) % MOD};
  24. };
  25. template <int n, int m, int mask>
  26. struct metaFor <-1, n, m, mask>
  27. {
  28.     enum {ans = 0};
  29. };
  30. template <int n, int m, int mask> struct dp
  31. {
  32.     enum {ans = metaFor <(1 << n) - 1, n, m, mask>::ans};
  33. };
  34. template <int n, int mask>
  35. struct dp <n, 1, mask>
  36. {
  37.     enum {ans = 1};
  38. };
  39. int main()
  40. {
  41.     enum {n = 6, m = 6};
  42.     enum {mask = 1 << ((n + 1) / 2)};
  43.     std::cout << dp <n, m + 1, (mask * mask - 1) / 3>::ans;
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement