Advertisement
STANAANDREY

AOCMMXX d14p2

Dec 15th, 2020
889
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int n = 36;
  4. string s, mask;
  5. map<uint64_t, uint64_t> mp;
  6.  
  7. void bitsBktr(string res, int val) {
  8.     int cntX = 0;
  9.     int idToPos[n + 3] = {};
  10.     for (int i = 0; i < n; i++) {
  11.         if (res[i] == 'X')
  12.             idToPos[cntX++] = i;
  13.     }
  14.     const uint64_t finState = 1ULL * (1 << cntX) - 1;
  15.     for (bitset<n> state(0); (state.to_ullong() <= finState); state = state.to_ullong() + 1) {
  16.         for (int i = 0; i < cntX; i++) {
  17.             res[idToPos[i]] = state[i] + '0';
  18.         }
  19.         mp[bitset<n>(string(res.rbegin(), res.rend())).to_ullong()] = val;
  20.     }//*/
  21. }
  22.  
  23. int main() {
  24.     freopen("text.in", "r", stdin);
  25.     while (cin >> s) {
  26.         if (s == "mask") {
  27.             cin >> s >> s;
  28.             mask = string(s.rbegin(), s.rend());
  29.         } else {
  30.             bitset<n> bs(atoi(s.substr(4).c_str()));
  31.             int val;
  32.             cin >> s >> val;
  33.             string res;
  34.             res.resize(n);
  35.             for (int i = 0; i < n; i++) {
  36.                 if (mask[i] == '0')
  37.                     res[i] = bs[i] + '0';
  38.                 else
  39.                     res[i] = mask[i];
  40.             }
  41.             bitsBktr(res, val);
  42.         }
  43.     }//*/
  44.     int64_t sum = 0LL;
  45.     for (auto it : mp) {
  46.         sum += it.second;
  47.     }
  48.     cout << sum << endl;
  49.     return 0;
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement