比赛 |
CSP2022普及组 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
逻辑表达式 |
最终得分 |
100 |
用户昵称 |
ANIG |
运行时间 |
0.251 s |
代码语言 |
C++ |
内存使用 |
3.34 MiB |
提交时间 |
2022-10-29 16:29:25 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
char s[1000005];
int lth,ok,res1,res2;
stack<int>sz,fh,has;
void ys(){
int res=sz.top();
sz.pop();
if(fh.top()==1){
res|=sz.top();
}else if(fh.top()==2){
res&=sz.top();
}
sz.pop();
sz.push(res);
if(has.top())ok=0;
fh.pop();has.pop();
}
signed main(){
freopen("csp2022pj_expr.in","r",stdin);
freopen("csp2022pj_expr.out","w",stdout);
cin>>s;
lth=strlen(s);
for(int i=0;i<lth;i++){
if(s[i]=='('){
fh.push(3);
}else if(s[i]=='0'){
sz.push(0);
}else if(s[i]=='1'){
sz.push(1);
}else if(s[i]=='|'){
while(fh.size()&&fh.top()!=3){
ys();
}
fh.push(1);
if(ok==0&&sz.top()==1){
res2++,ok=1,has.push(1);
}else has.push(0);
}else if(s[i]=='&'){
while(fh.size()&&fh.top()!=3&&fh.top()!=1){
ys();
}
fh.push(2);
if(ok==0&&sz.top()==0){
res1++,ok=1,has.push(1);
}else has.push(0);
}else if(s[i]==')'){
while(fh.size()&&fh.top()!=3){
ys();
}
if(fh.size())fh.pop();
}
}
while(fh.size()&&fh.top()!=3){
ys();
}
cout<<sz.top()<<endl<<res1<<" "<<res2;
return 0;
}