lina_os

Untitled

Jul 2nd, 2025 (edited)
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define ul unsigned long long
  5. #define ld long double
  6. #define vll(v) vector<ll>v
  7. //#define vll(v,n) vector<ll>v(n);
  8. #define mll(m) map<ll,ll>m;
  9. #define sll(s) set<ll>s;
  10. #define iv(v) for(auto &i:v) cin >> i;
  11. #define ov(v) for(auto &i:v) cout << i << " ";
  12. #define all(v) (v.begin(),v.end());
  13. #define Bismillah ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  14.  
  15. using namespace std;
  16.  
  17. string toBin(ll n) {
  18.     string s;
  19.     while (n) {
  20.         s.push_back(n%2+'0');
  21.         n/=2;
  22.     }
  23.     reverse(s.begin(), s.end());
  24.     return s;
  25. }
  26. string toNice(ll n, ll i) {
  27.     string s;
  28.     while (n) {
  29.         s.push_back((n%2)?'9':'6');
  30.         n/=2;
  31.     }
  32.     while (s.size()<i) s.push_back('6');
  33.     reverse(s.begin(), s.end());
  34.     return s;
  35. }
  36.  
  37. ll toDec(string s) {
  38.     reverse(s.begin(), s.end());
  39.     ll n=0;
  40.     for (int i=0; i<s.size(); i++) {
  41.         n+=(s[i]-'0') * (1<<i);
  42.     }
  43.     return n;
  44. }
  45.  
  46. void solve() {
  47.     ll n;
  48.     cin >> n;
  49.     vector<pair<char,ll>>v(n);
  50.     for (int i=0; i<n; i++) {
  51.         cin >> v[i].first >> v[i].second;
  52.     }
  53.  
  54.     map<char,char>nott; nott['x']='y'; nott['y']='x'; nott['1']='0'; nott['0']='1';
  55.     string s(10,'x');
  56.     stack<pair<char,ll>>l;
  57.     vector<pair<char,ll>>a;
  58.     string pre=s;
  59.     for (int i=0; i<n; i++) {
  60.         char c=v[i].first;
  61.         string bef=s;
  62.  
  63.         if (!l.empty() && l.top().first==c) {
  64.             bef=pre;
  65.             if (c=='|') v[i].second|=l.top().second;
  66.             else if (c=='&') v[i].second&=l.top().second;
  67.             else v[i].second^=l.top().second;
  68.             l.pop();
  69.         }
  70.         string x=toBin(v[i].second);
  71.         reverse (x.begin(), x.end());
  72.         for (int j=0; j<x.size(); j++) {
  73.             if (c=='|') {
  74.                 if (x[j]=='1') s[j]='1';
  75.             }
  76.             else if (c=='^') {
  77.                 if (x[j]=='1') s[j]=nott[s[j]];
  78.             }
  79.             else {
  80.                 if (x[j]=='0') s[j]='0';
  81.             }
  82.         }
  83.         if (c=='&') {
  84.             for (int j=x.size(); j<10; j++) {
  85.                 s[j]='0';
  86.             }
  87.         }
  88.         if (c=='&' && v[i].second==0) {
  89.             while (!l.empty()) l.pop();
  90.         }
  91.         if (v[i].second==0 && (v[i].first=='|' || v[i].first=='^')) continue;
  92.         if (s!=bef) l.push({c,v[i].second});//
  93.         pre=bef;
  94.     }
  95.     a.clear();
  96.     while (!l.empty()) {
  97.         a.push_back(l.top());
  98.         l.pop();
  99.     }
  100.     reverse(a.begin(), a.end());
  101.     cout << a.size() << endl;
  102.     for (auto i:a) cout << i.first << ' ' << i.second << endl;
  103.  
  104.  
  105. }
  106. int main() {
  107.     Bismillah
  108.     ll t=1;
  109. //    cin >> t;
  110.     while (t--) {
  111.         solve();
  112.     }
  113.     return 0;
  114. }
  115.  
  116.  
Advertisement
Add Comment
Please, Sign In to add comment