比赛 |
CSP2022普及组 |
评测结果 |
RRRRRRRRRRRRRRRRRRRR |
题目名称 |
逻辑表达式 |
最终得分 |
0 |
用户昵称 |
康尚诚 |
运行时间 |
0.009 s |
代码语言 |
C++ |
内存使用 |
5.74 MiB |
提交时间 |
2022-10-29 17:57:47 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
string zz;//原中缀表达式
stack<char> stk;
string str;
string zztohz(string zz)//中缀表达式转后缀表达式
{
int len=zz.length();
string ans="";
for(int i=0;i<len;i++)
{
// cout<<zz[i];
if(zz[i]=='0'||zz[i]=='1')
{
ans=ans+zz[i]+' ';
}
if(zz[i]=='|')
{
while(!stk.empty()&&stk.top()!='(')
{
ans=ans+stk.top()+' ';
stk.pop();
}
stk.push('|');
}
if(zz[i]=='&')
{
if(!stk.empty()&&stk.top()=='|')
{
stk.push('&');
}
else
{
while(!stk.empty()&&stk.top()!='(')
{
ans=ans+stk.top()+' ';
stk.pop();
}
stk.push('&');
}
}
if(zz[i]=='(')
{
stk.push('(');
ans=ans+"( ";
}
if(zz[i]==')')
{
while(!stk.empty()&&stk.top()!='(')
{
ans=ans+stk.top()+' ';
stk.pop();
}
stk.pop();
ans=ans+") ";
}
}
while(!stk.empty())
{
ans=ans+stk.top()+' ';
stk.pop();
}
return ans;
}
int dland=0,dlor=0;
stack<int> stk2;
bool dl=false;
int getans(string s)
{
int len=s.length();
for(int i=0;i<len;i++)
{
if(s[i]==' ')
{
continue;
}
if(!stk2.empty())
{
if(stk2.top()==1)
{
if(str[i/2+1]=='|'&&!dl)
{
cout<<i<<"or"<<endl;
dlor++;
if(s[i+2]=='(')
{
dl=true;
}
}
}
if(stk2.top()==0)
{
if(str[i/2+1]=='&'&&!dl)
{
cout<<i<<"and"<<endl;
dland++;
if(s[i+1]=='(')
{
dl=true;
}
}
}
}
if(s[i]==')')
{
dl=false;
}
if(s[i]=='1'||s[i]=='0')
{
stk2.push(s[i]-'0');
}
if(s[i]=='|')
{
int a=stk2.top();stk2.pop();
int b=stk2.top();stk2.pop();
stk2.push(a|b);
}
if(s[i]=='&')
{
int a=stk2.top();stk2.pop();
int b=stk2.top();stk2.pop();
stk2.push(a&b);
}
}
return stk2.top();
}
int main()
{
cin>>str;
for(int i=0;i<str.length();i++)
{
cout<<str[i]<<" ";
}
cout<<endl<<zztohz(str)<<endl;
cout<<getans(zztohz(str))<<endl<<dland<<" "<<dlor;
}