Advertisement
cosenza987

Untitled

Dec 19th, 2023
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. //Слава Україні, Героям слава
  2.  
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. map<string, int> mp;
  8. vector<vector<string>> k;
  9.  
  10. int main() {
  11.     ios_base::sync_with_stdio(false);
  12.     cin.tie(nullptr);
  13.     freopen("in.txt", "r", stdin);
  14.     freopen("out.txt", "w", stdout);
  15.     string ss;
  16.     while(true) {
  17.         getline(cin, ss);
  18.         if(ss == "done") break;
  19.         vector<string> v;
  20.         string t;
  21.         stringstream X(ss);
  22.         while(getline(X, t, ' ')) {
  23.             v.push_back(t);
  24.         }
  25.         string ref = v.front();
  26.         v.erase(v.begin());
  27.         mp[ref] = k.size();
  28.         k.push_back(v);
  29.     }
  30.     function<string(string)> parse = [&](string y) {
  31.         if(y.find(':') == string::npos) {
  32.             return y;
  33.         }
  34.         int ind = 0;
  35.         for(int i = 0; i < (int)y.size(); i++) {
  36.             if(y[i] == ':') {
  37.                 ind = i;
  38.                 break;
  39.             }
  40.         }
  41.         string l = y.substr(0, ind), r = y.substr(ind + 1);
  42.         return r;
  43.     };
  44.     mp["A"] = -1;
  45.     mp["R"] = -2;
  46.     vector<array<int, 8>> v;
  47.     function<void(int, int, int, int, int, int, int, int, int)> dfs = [&](int lx, int rx, int lm, int rm, int la, int ra, int ls, int rs, int cur) {
  48.         if(lx > rx or lm > rm or la > ra or ls > rs) return;
  49.         if(cur == -2) return;
  50.         if(cur == -1) {
  51.             v.push_back({ lx, rx, lm, rm, la, ra, ls, rs });
  52.             return;
  53.         }
  54.         for(auto e : k[cur]) {
  55.             string res = parse(e);
  56.             if(e.find(':') == string::npos) {
  57.                 dfs(lx, rx, lm, rm, la, ra, ls, rs, mp[res]);
  58.                 return;
  59.             }
  60.             while(e.back() != ':') {
  61.                 e.pop_back();
  62.             }
  63.             e.pop_back();
  64.             string l = e;
  65.             char val = l.front();
  66.             l.erase(l.begin());
  67.             int k = stoi(l.substr(1));
  68.             if (l.front() == '>') {
  69.                 if (val == 'x') {
  70.                     dfs(max(k + 1, lx), rx, lm, rm, la, ra, ls, rs, mp[res]);
  71.                     rx = min(rx, k);
  72.                 } else if(val == 'm') {
  73.                     dfs(lx, rx, max(k + 1, lm), rm, la, ra, ls, rs, mp[res]);
  74.                     rm = min(rm, k);
  75.                 } else if(val == 'a') {
  76.                     dfs(lx, rx, lm, rm, max(k + 1, la), ra, ls, rs, mp[res]);
  77.                     ra = min(ra, k);
  78.                 } else {
  79.                     dfs(lx, rx, lm, rm, la, ra, max(k + 1, ls), rs, mp[res]);
  80.                     rs = min(rs, k);
  81.                 }
  82.             } else {
  83.                 if (val == 'x') {
  84.                     dfs(lx, min(k - 1, rx), lm, rm, la, ra, ls, rs, mp[res]);
  85.                     lx = max(lx, k);
  86.                 } else if(val == 'm') {
  87.                     dfs(lx, rx, lm, min(k - 1, rm), la, ra, ls, rs, mp[res]);
  88.                     lm = max(lm, k);
  89.                 } else if(val == 'a') {
  90.                     dfs(lx, rx, lm, rm, la, min(k - 1, ra), ls, rs, mp[res]);
  91.                     la = max(la, k);
  92.                 } else {
  93.                     dfs(lx, rx, lm, rm, la, ra, ls, min(k - 1, rs), mp[res]);
  94.                     ls = max(ls, k);
  95.                 }
  96.             }
  97.         }
  98.     };
  99.     dfs(1, 4000, 1, 4000, 1, 4000, 1, 4000, mp["in"]);
  100.     long long ans = 0;
  101.     for(int i = 0; i < (int)v.size(); i++) {
  102.         long long tmp = 1;
  103.         for(int j = 1; j < 8; j += 2) {
  104.             tmp *= (v[i][j] - v[i][j - 1] + 1);
  105.         }
  106.         ans += tmp;
  107.     }
  108.     cout << ans << "\n";
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement