1 solutions
-
0
#include<iostream> #include<stack> using namespace std; struct th{ int f,s,t; }; stack<char>o; stack<th>n; string a; int p,m,k; int main(){ cin>>a; for(int i=0;i<a.size();i++){ if(a[i]>='0'&&a[i]<='9'){ p=a[i]-'0'; while(++i<a.size()&&a[i]>='0'&&a[i]<='9'){ p*=10; p+=a[i]-'0'; } n.push({p,0,0}); i--; } else if(a[i]==')'){ while(o.top()!='('){ char u=o.top();o.pop(); int x=n.top().f,xx=n.top().s,xxx=n.top().t;n.pop(); int y=n.top().f,yy=n.top().s,yyy=n.top().t;n.pop(); if(u=='|'){ if(y!=1)n.push({y|x,xx+yy,xxx+yyy}); else n.push({1,yy+1,yyy}); } if(u=='&'){ if(y!=0)n.push({y&x,xx+yy,xxx+yyy}); else n.push({0,yy,yyy+1}); } } o.pop(); } else{ while(a[i]=='|'&&!o.empty()&&o.top()!='('){ char u=o.top();o.pop(); int x=n.top().f,xx=n.top().s,xxx=n.top().t;n.pop(); int y=n.top().f,yy=n.top().s,yyy=n.top().t;n.pop(); if(u=='|'){ if(y!=1)n.push({y|x,xx+yy,xxx+yyy}); else n.push({1,yy+1,yyy}); } if(u=='&'){ if(y!=0)n.push({y&x,xx+yy,xxx+yyy}); else n.push({0,yy,yyy+1}); } } while(a[i]=='&'&&!o.empty()&&o.top()=='&'){ char u=o.top();o.pop(); int x=n.top().f,xx=n.top().s,xxx=n.top().t;n.pop(); int y=n.top().f,yy=n.top().s,yyy=n.top().t;n.pop(); if(u=='|'){ if(y!=1)n.push({y|x,xx+yy,xxx+yyy}); else n.push({1,yy+1,yyy}); } if(u=='&'){ if(y!=0)n.push({y&x,xx+yy,xxx+yyy}); else n.push({0,yy,yyy+1}); } } o.push(a[i]); } } while(!o.empty()){ char u=o.top();o.pop(); int x=n.top().f,xx=n.top().s,xxx=n.top().t;n.pop(); int y=n.top().f,yy=n.top().s,yyy=n.top().t;n.pop(); if(u=='|'){ if(y!=1)n.push({y|x,xx+yy,xxx+yyy}); else n.push({1,yy+1,yyy}); } if(u=='&'){ if(y!=0)n.push({y&x,xx+yy,xxx+yyy}); else n.push({0,yy,yyy+1}); } } cout<<n.top().f<<endl<<n.top().t<<" "<<n.top().s; return 0; }
- 1
Information
- ID
- 7836
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 4
- Tags
- # Submissions
- 63
- Accepted
- 7
- Uploaded By