Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define ul unsigned long long
- #define ld long double
- #define vll(v) vector<ll>v
- //#define vll(v,n) vector<ll>v(n);
- #define mll(m) map<ll,ll>m;
- #define sll(s) set<ll>s;
- #define iv(v) for(auto &i:v) cin >> i;
- #define ov(v) for(auto &i:v) cout << i << " ";
- #define all(v) (v.begin(),v.end());
- #define Bismillah ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
- using namespace std;
- string toBin(ll n) {
- string s;
- while (n) {
- s.push_back(n%2+'0');
- n/=2;
- }
- reverse(s.begin(), s.end());
- return s;
- }
- string toNice(ll n, ll i) {
- string s;
- while (n) {
- s.push_back((n%2)?'9':'6');
- n/=2;
- }
- while (s.size()<i) s.push_back('6');
- reverse(s.begin(), s.end());
- return s;
- }
- ll toDec(string s) {
- reverse(s.begin(), s.end());
- ll n=0;
- for (int i=0; i<s.size(); i++) {
- n+=(s[i]-'0') * (1<<i);
- }
- return n;
- }
- void solve() {
- ll n;
- cin >> n;
- vector<pair<char,ll>>v(n);
- for (int i=0; i<n; i++) {
- cin >> v[i].first >> v[i].second;
- }
- map<char,char>nott; nott['x']='y'; nott['y']='x'; nott['1']='0'; nott['0']='1';
- string s(10,'x');
- stack<pair<char,ll>>l;
- vector<pair<char,ll>>a;
- string pre=s;
- for (int i=0; i<n; i++) {
- char c=v[i].first;
- string bef=s;
- if (!l.empty() && l.top().first==c) {
- bef=pre;
- if (c=='|') v[i].second|=l.top().second;
- else if (c=='&') v[i].second&=l.top().second;
- else v[i].second^=l.top().second;
- l.pop();
- }
- string x=toBin(v[i].second);
- reverse (x.begin(), x.end());
- for (int j=0; j<x.size(); j++) {
- if (c=='|') {
- if (x[j]=='1') s[j]='1';
- }
- else if (c=='^') {
- if (x[j]=='1') s[j]=nott[s[j]];
- }
- else {
- if (x[j]=='0') s[j]='0';
- }
- }
- if (c=='&') {
- for (int j=x.size(); j<10; j++) {
- s[j]='0';
- }
- }
- if (c=='&' && v[i].second==0) {
- while (!l.empty()) l.pop();
- }
- if (v[i].second==0 && (v[i].first=='|' || v[i].first=='^')) continue;
- if (s!=bef) l.push({c,v[i].second});//
- pre=bef;
- }
- a.clear();
- while (!l.empty()) {
- a.push_back(l.top());
- l.pop();
- }
- reverse(a.begin(), a.end());
- cout << a.size() << endl;
- for (auto i:a) cout << i.first << ' ' << i.second << endl;
- }
- int main() {
- Bismillah
- ll t=1;
- // cin >> t;
- while (t--) {
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment