Advertisement
Guest User

Untitled

a guest
Oct 19th, 2014
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <fstream>
  4. #include <vector>
  5. #include <set>
  6. #include <map>
  7. #include <string>
  8. #include <algorithm>
  9. #include <cstdlib>
  10. #include <ctime>
  11. #include <deque>
  12. #include <list>
  13. #include <cmath>
  14.  
  15. using namespace std;
  16.  
  17. const int MAXN = 16, POWN = 1 << MAXN;
  18. unsigned int f[POWN], g[POWN], h[POWN];
  19. unsigned int cur = 0, a, b;
  20.  
  21. unsigned int nextRand16() {
  22.     cur = cur * a + b;
  23.     return cur / POWN;
  24. }
  25.  
  26. int main() {
  27.     ios_base::sync_with_stdio(false);
  28.     int n, t;
  29.     cin >> n >> t >> a >> b;
  30.     for(int tt = 0; tt < t; tt++) {
  31.         for(int i = 0; i < (1 << n); i++)
  32.             f[i] = nextRand16();
  33.         for(int i = 0; i < (1 << n); i++)
  34.             g[i] = nextRand16();
  35.         for(int i = 0; i < n; i++)
  36.             for(int j = 0; j < (1 << n); j++)
  37.                 if(!(j & (1 << i)))
  38.                     f[j | (1 << i)] += f[j];
  39.         for(int i = 0; i < n; i++)
  40.             for(int j = 0; j < (1 << n); j++)
  41.                 if(!(j & (1 << i)))
  42.                     g[j | (1 << i)] += g[j];
  43.         for(int i = 0; i < (1 << n); i++)
  44.             h[i] = f[i] * g[i];
  45.         for(int i = 0; i < n; i++)
  46.             for(int j = 0; j < (1 << n); j++)
  47.                 if(!(j & (1 << i)))
  48.                     h[j | (1 << i)] -= h[j];
  49.         unsigned int ans = 0;
  50.         for(int i = 0; i < (1 << n); i++)
  51.             ans += h[i] * (unsigned int)(i + 1);
  52.         cout << ans << '\n';
  53.     }
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement