考试的时候忘了 & 优先级大于 |。
奔着 75 打的,只拿了 20。
#include<bits/stdc++.h>
using namespace std;
int n;
int cnt1,cnt2,ans;
string s;
void subtask1(){
if(s[2]=='&'){
ans=((s[1]-48)&(s[3]-48));
if(s[1]=='0') cnt1=1;
}
else if(s[2]=='|'){
ans=((s[1]-48)|(s[3]-48));
if(s[1]=='1') cnt2=1;
}
cout<<ans<<endl<<cnt1<<" "<<cnt2;
exit(0);
}
void subtask2(){
bool flag=false;
for(register int i=1;i<=n;++i){
if(s[i]=='('){
flag=true;break;
}
}
if(flag==false){
if(s[2]=='&'){
ans=((s[1]-48)&(s[3]-48));
if(s[1]=='0') cnt1++;
}
else if(s[2]=='|'){
ans=((s[1]-48)|(s[3]-48));
if(s[1]=='1') cnt2++;
}
// cout<<ans<<endl;
if(s[4]=='&'){
if(ans==0) cnt1++;
ans&=(s[5]-48);
}
else if(s[4]=='|'){
if(ans==1) cnt2++;
ans|=(s[5]-48);
}
}
else{
if(s[3]=='&'){
ans=((s[2]-48)&(s[4]-48));
if(s[2]=='0') cnt1++;
}
else if(s[3]=='|'){
ans=((s[2]-48)|(s[4]-48));
if(s[2]=='1') cnt2++;
}
}
cout<<ans<<endl<<cnt1<<" "<<cnt2;
exit(0);
}
void subtask3_sp1(){
string ss;
for(register int i=1;i<=n;++i){
if(s[i]=='('||s[i]==')') continue;
ss+=s[i];
}
int len=ss.size();ss=" "+ss;
if(ss[1]=='1') cnt2++;
ans=(ss[1]-48)|(ss[3]-48);
for(register int i=4;i<=len;i+=2){
if(ans==1) cnt2++;
ans|=(ss[i+1]-48);
}
}
void subtask3_sp2(){
string ss;
for(register int i=1;i<=n;++i){
if(s[i]=='('||s[i]==')') continue;
ss+=s[i];
}
int len=ss.size();ss=" "+ss;
if(ss[1]=='0') cnt1++;
ans=(ss[1]-48)&(ss[3]-48);
for(register int i=4;i<=len;i+=2){
if(ans==0) cnt1++;
ans&=(ss[i+1]-48);
}
}
void subtask3_sp3(){
if(s[2]=='&'){
if(s[1]=='0') cnt1++;
ans=((s[1]-48)&(s[3]-48));
}
else if(s[2]=='|'){
if(s[1]=='1') cnt2++;
ans=((s[1]-48)|(s[3]-48));
}
for(register int i=4;i<=n;i+=2){
if(s[i]=='&'){
if(ans==0) cnt1++;
ans&=(s[i+1]-48);
}
else if(s[i]=='|'){
if(ans==1) cnt2++;
ans|=(s[i+1]-48);
}
}
}
void cj(){
ans=0;cnt1=cnt2=n/3;
}
int main(){
//freopen("expr.in","r",stdin);
//freopen("expr.out","w",stdout);
cin>>s;n=s.size();s=" "+s;
if(n==3) subtask1();
else if(n==5) subtask2();
int pd=0;
for(register int i=1;i<=n;++i){
if(s[i]=='&') pd=1;
}
if(pd==0) subtask3_sp1();
pd=0;
for(register int i=1;i<=n;++i){
if(s[i]=='|') pd=1;
}
if(pd==0) subtask3_sp2();
pd=0;
for(register int i=1;i<=n;++i){
if(s[i]=='(') pd=1;
}
if(pd==0) subtask3_sp3();
cout<<ans<<endl<<cnt1<<" "<<cnt2;
}