1 solutions

  • 0
    @ 2025-10-15 17:06:58
    #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