Guest User

Untitled

a guest
Aug 4th, 2025
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define all(x) (x).begin(), (x).end()
  4. #define itn int
  5. #define make_unique(x) sort((x).begin(), (x).end()); (x).erase(unique((x).begin(), (x).end()), (x).end())
  6.  
  7. using namespace std;
  8.  
  9. struct State {
  10.     int x, y;
  11.     array<int, 3> back;
  12. };
  13.  
  14. void drawTable(const map<pair<int, int>, int>& M, int x, int y) {
  15.     int min_x = x, max_x = x;
  16.     int min_y = y, max_y = y;
  17.     for (const auto& [k, v] : M) {
  18.         min_x = min(min_x, k.first);
  19.         max_x = max(max_x, k.first);
  20.         min_y = min(min_y, k.second);
  21.         max_y = max(max_y, k.second);
  22.     }
  23.     for (int i = max_y; i >= min_y; --i) {
  24.         for (int j = min_x; j <= max_x; ++j) {
  25.             char tmp = ' ';
  26.             if (M.count({j, i})) {
  27.                 tmp = '0' + M.at({j, i});
  28.             }
  29.             if (j == x && i == y) {
  30.                 tmp = '*';
  31.             }
  32.             cerr << tmp;
  33.         }
  34.         cerr << "\n";
  35.     }
  36. }
  37.  
  38. void check(const string& program, long long a, long long b) {
  39.     map<pair<int, int>, int> M;
  40.     long long intended = a + b;
  41.     for (int i = 0; a; ++i, a /= 2) {
  42.         M[{-i, 1}] = a % 2;
  43.     }
  44.     for (int i = 0; b; ++i, b /= 2) {
  45.         M[{-i, 0}] = b % 2;
  46.     }
  47.  
  48.     auto getInPos = [&](int x, int y) {
  49.         return M.count({x, y}) ? M[{x, y}] : 2;
  50.     };
  51.  
  52.     vector<State> st;
  53.     State cur = {0, 0, {0, 0, 3}};
  54.     st.push_back(cur);
  55.     for (char c : program) {
  56.         // drawTable(M, cur.x, cur.y);
  57.         // cerr << "=======================\n";
  58.         array<int, 3> new_back = {cur.x, cur.y, getInPos(cur.x, cur.y)};
  59.         if (c == '0') {
  60.             M[{cur.x, cur.y}] = 0;
  61.         } else if (c == '1') {
  62.             M[{cur.x, cur.y}] = 1;
  63.         } else if (c == 'e') {
  64.             M.erase({cur.x, cur.y});
  65.         } else if (c == 'l') {
  66.             --cur.x;
  67.         } else if (c == 'r') {
  68.             ++cur.x;
  69.         } else if (c == 'd') {
  70.             --cur.y;
  71.         } else if (c == 'u') {
  72.             ++cur.y;
  73.         } else if (c == 's') {
  74.             // pass;
  75.         } else if (c == 't') {
  76.             int num = new_back[2] + 1;
  77.             if (num == 3) {
  78.                 num = 0;
  79.             }
  80.             for (int it = 0; it < num && (int)st.size() > 1; ++it) {
  81.                 cur.x = cur.back[0];
  82.                 cur.y = cur.back[1];
  83.                 if (cur.back[2] == 2) {
  84.                     M.erase({cur.x, cur.y});
  85.                 } else {
  86.                     M[{cur.x, cur.y}] = cur.back[2];
  87.                 }
  88.                 st.pop_back();
  89.                 cur = st.back();
  90.             }
  91.         } else {
  92.             assert(false);
  93.         }
  94.  
  95.         if (c != 't') {
  96.             cur.back = new_back;
  97.             st.push_back(cur);
  98.         }
  99.     }
  100.     long long result = 0;
  101.     assert(M.count({cur.x, cur.y}));
  102.     // drawTable(M, cur.x, cur.y);
  103.     while (M.count({cur.x, cur.y})) {
  104.         result = result * 2 + M[{cur.x++, cur.y}];
  105.         assert(result <= intended);
  106.     }
  107.     assert(result == intended);
  108. }
  109.  
  110. const int kMaxLength = 100000;
  111.  
  112. int main() {
  113.     // int n = inf.readInt();
  114.     // vector<pair<long long, long long>> a(n);
  115.     // for (int i = 0; i < n; ++i) {
  116.     //  a[i].first = inf.readLong();
  117.     //  a[i].second = inf.readLong();
  118.     // }
  119.     vector<pair<long long, long long>> a = {{123456789, 987654321}};
  120.  
  121.     // string s = ouf.readString("[01elrudst]*");
  122.     string s = "d0luuu1ddd0s10usususttttttl1l0l0l0l1l1l1l0l1l0l1l1l0l0l0l1l0l1l1l1l0l0l0l1l0l0l0l0l1lr";
  123.     assert((int)s.length() <= kMaxLength);
  124.  
  125.     for (auto p : a) {
  126.         check(s, p.first, p.second);
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment