rt,模拟卡在70分上不去了,过样例和短一点的都能过,长一点的自带的样例3,4都过不去
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
#define l int
#define B bool
char s[1000010];
B f1,f2;
l ans1,ans2,len,n,q;
int numpd(int a)
{
if(s[a]=='1'||s[a]=='0') return 1;
if(s[a]=='&') return 2;
if(s[a]=='|') return 3;
return 0;
}
int main()
{
// freopen("expr3.in","r",stdin);
scanf("%s",s+1);
len=strlen(s+1);
for(l i=1;i<=len;++i)
{
switch(numpd(i))
{
case 1:
n=s[i]-'0';
break;
case 2:
if(!n) f1=1;
break;
case 3:
if(n) f2=1;
break;
}
ans1+=f1;ans2+=f2;
if((f1||f2))
{
i++;
if(s[i]!='(')
{
while(s[i]!='|'&&s[i]!=')'&&i<=len)
{
if(s[i]=='&'&&f1) ++ans1;
// cout<<endl<<i<<endl;
++i;
if(s[i]=='(') {i--;ans1--;break;}
}
i--;
}
else
{
q=1;
while(q)
{
++i;
if(s[i]=='(')
++q;
if(s[i]==')')
--q;
// cout<<endl<<i<<endl;
}
}
}
f1=f2=0;
}
printf("%d\n%d %d",n,ans1,ans2);
return 0;
}