Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- ll v1[1<<22];
- ll v2[1<<22];
- ll eq[1<<22];
- vi v;
- int main() {
- ll n, m;
- cin >> n >> m;
- for(int i = 0; i < n; i++) {
- int aux;
- cin >> aux;
- v.pb(aux);
- }
- int h1 = m/2;
- int h2 = m - h1;
- for(int i = 0; i < n; i++) {
- int h1mask = v[i] >> h2;
- h1mask = h1mask << h2;
- int h2mask = ((1 << h2) - 1) & v[i];
- int h2maskcp = ((1 << h2) - 1) & (~h2mask);
- for(int j = h1mask; j; j = (j - 1)&h1mask){
- v1[j + h2mask]++;
- }
- v1[h2mask]++;
- for(int j = h2maskcp; j; j = (j - 1)&h2maskcp){
- v2[j + h2mask + h1mask]++;
- }
- v2[h2mask + h1mask]++;
- eq[v[i]]++;
- }
- ll ans = 0;
- for(int i = 0; i < (1 << m); i++) {
- ans += v1[i]*v2[i];
- ans -= (eq[i]*(eq[i]-1))/2;
- }
- ans -= n;
- cout << (n * (n-1))/2 - ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement