比赛 CSP2022普及组 评测结果 WAAWAAWWWWAWWWWWWWWW
题目名称 逻辑表达式 最终得分 25
用户昵称 嗨嗨嗨 运行时间 0.275 s
代码语言 C++ 内存使用 5.57 MiB
提交时间 2022-10-29 17:23:08
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int l,i,a[1000001],topa,topb,num,ans1,ans2,ans;
char b[1000001];
bool fyu=false,fhuo=false,fkuohao=false;
string s;
int main()
{
    freopen("csp2022pj_expr.in","r",stdin);
    freopen("csp2022pj_expr.out","w",stdout);
    cin>>s;
    l=s.length();
    for(i=0;i<l;i++)
    {
    	if(s[i]=='('||s[i]==')') fkuohao=true;
    	if(s[i]=='|') fhuo=true;
    	if(s[i]=='&') fyu=true;
	}
	if(fkuohao==false)
	{
		for(i=0;i<l;i++)
		{
			if(s[i]=='1'||s[i]=='0')
			{
				a[++topa]=s[i]-48;
			}
			else
			{
				if(s[i]=='|') b[++topb]=s[i];
				else
				{
					if(a[topa-1]=='0') ans1++;
					a[topa-1]=a[topa-1]&a[topa];
					topa--;
				}
			}
		}
		for(;topb!=0;)
		{
			if(a[topa-1]==1) ans2++;
			a[topa-1]=a[topa-1]|a[topa];
			topa--;
			topb--;
		}
		cout<<a[1]<<endl<<ans1<<" "<<ans2;
		return 0;
	} 
	if(fhuo==false)
	{
		for(i=0;i<l;)
		{
			if(s[i]=='1'||s[i]=='0')
			{
				a[++topa]=s[i]-48;
				i++;
			}
			else
			{
				if(s[i]=='&')
				{
					if(a[topa]==0)
					{
						ans++;
						a[++topa]=0;
						i++;
						if(s[i]!='(')
						{
							if(i<l-1) i++;
						}
						else
						{
							for(;;)
						    {
						    	if(s[i]=='(') num++;
						    	if(s[i]==')') num--;
						    	if(num==0)
						    	{
						     		if(i<l-1) i++;
							    	num=0;
							    	break;
							    }
							    i++;
						    }
						} 
					}
					else
					{
						b[++topb]=s[i];
						i++;
					}
				}
				else
				{
					if(s[i]=='(')
				    {
					    b[++topb]=s[i];
					    i++;
				    }
				    else
				    {
				    	a[topa-1]=a[topa-1]&a[topa];
				    	topa--;
				    	i++;
					}
				}
			}
		}
		cout<<a[topa]<<endl<<ans<<" "<<0;
		return 0;
	}
	if(fyu==false)
	{
		for(i=0;i<l;)
		{
			if(s[i]=='1'||s[i]=='0')
			{
				a[++topa]=s[i]-48;
				i++;
			}
			else
			{
				if(s[i]=='|')
				{
					if(a[topa]==1)
					{
						ans++;
						a[++topa]=1;
						i++;
						if(s[i]!='(')
						{
							if(i<l-1) i++;
						}
						else
						{
							for(;;)
						    {
						    	if(s[i]=='(') num++;
						    	if(s[i]==')') num--;
						    	if(num==0)
						    	{
						     		if(i<l-1) i++;
							    	num=0;
							    	break;
							    }
							    i++;
						    }
						} 
					}
					else
					{
						b[++topb]=s[i];
						i++;
					}
				}
				else
				{
					if(s[i]=='(')
				    {
					    b[++topb]=s[i];
					    i++;
				    }
				    else
				    {
				    	a[topa-1]=a[topa-1]|a[topa];
				    	topa--;
				    	i++;
					}
				}
			}
		}
		cout<<a[topa]<<endl<<0<<" "<<ans;
		return 0;
	}
    return 0;
}