Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <fstream>
- #include <vector>
- #include <set>
- #include <map>
- #include <string>
- #include <algorithm>
- #include <cstdlib>
- #include <ctime>
- #include <deque>
- #include <list>
- #include <cmath>
- using namespace std;
- const int MAXN = 16, POWN = 1 << MAXN;
- unsigned int f[POWN], g[POWN], h[POWN];
- unsigned int cur = 0, a, b;
- unsigned int nextRand16() {
- cur = cur * a + b;
- return cur / POWN;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- int n, t;
- cin >> n >> t >> a >> b;
- for(int tt = 0; tt < t; tt++) {
- for(int i = 0; i < (1 << n); i++)
- f[i] = nextRand16();
- for(int i = 0; i < (1 << n); i++)
- g[i] = nextRand16();
- for(int i = 0; i < n; i++)
- for(int j = 0; j < (1 << n); j++)
- if(!(j & (1 << i)))
- f[j | (1 << i)] += f[j];
- for(int i = 0; i < n; i++)
- for(int j = 0; j < (1 << n); j++)
- if(!(j & (1 << i)))
- g[j | (1 << i)] += g[j];
- for(int i = 0; i < (1 << n); i++)
- h[i] = f[i] * g[i];
- for(int i = 0; i < n; i++)
- for(int j = 0; j < (1 << n); j++)
- if(!(j & (1 << i)))
- h[j | (1 << i)] -= h[j];
- unsigned int ans = 0;
- for(int i = 0; i < (1 << n); i++)
- ans += h[i] * (unsigned int)(i + 1);
- cout << ans << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement