代码:
#include <iostream>
#include <cmath>
using namespace std;
string s;
long long andsum,orsum;
int lastand[1000005];
int lastor[1000005];
int l1[500005],l2[500005];
int find(char ch,int l,int r){
if(ch=='|'){
if(lastor[r]>=l){
return lastor[r];
}
return -1;
}
else if(ch=='&'){
if(lastand[r]>=l){
return lastand[r];
}
return -1;
}
}
int dfs(long long l,long long r){
//cout<<"dfsed "<<l<<" "<<r;
//if(!kuohaopipei(l,r)){cout<<"aisdygqiufyg";}
/*if(s[l]=='('&&s[r]==')'&&kuohaopipei2(l,r)){
//if(l==ll)ll++;
//if(r==rr)rr--;
int ret=dfs(l+1,r-1);
return ret;
}*/
if(l==r)return s[l]-'0';
long long fff;
char wf;
fff=find('|',l,r);
if(fff<1){
fff=find('&',l,r);
if(fff>=1){
wf='&';
}
else{
if(s[l]=='('&&s[r]==')'){
return dfs(l+1,r-1);
}
}
}
else{
wf='|';
}
//cout<<" find:"<<fff<<endl;
int dfl,dfr;
dfl=dfs(l,fff-1);
//if(l==0&&r==4)cout<<wf;
//if(l==1&&r==3)cout<<"sd"<<dfl<<" "<<dfr<<"gf";
//if(l==1&&r==3)cout<<wf<<"kzisgviys";
if(wf=='|'){
//cout<<"dd"<<dfl<<"w";
if(dfl==1){
orsum++;
return 1;
}
else{
dfr=dfs(fff+1,r);
return dfl|dfr;
}
}
if(wf=='&'){
if(dfl==0){
andsum++;
return 0;
}
else{
dfr=dfs(fff+1,r);
return dfl𝔡
}
}
return -1;
}
signed main(){
cin>>s;
//cout<<kuohaopipei();return 0;
int s_i=0,res;
for(int i=0;i<s.length();i++){
if(s[i]=='|'){
l1[res]=i;
}
if(s[i]=='&'){
l2[res]=i;
}
if(s[i]=='('){
res++;
}
if(s[i]==')'){
res--;
}
lastand[i]=l2[res];
lastor[i]=l1[res];
}
/*for(int i=0;i<s.length();i++){
cout<<lastand[i]<<" "<<lastor[i]<<endl;
}*/
cout<<dfs(0,s.length()-1)<<endl<<andsum<<" "<<orsum;
return 0;
}