大佬帮忙,100分Unaccept,后面几个紫色RE
查看原帖
大佬帮忙,100分Unaccept,后面几个紫色RE
563090
吾之冗论楼主2023/8/30 14:41
#include<bits/stdc++.h>
using namespace std;
bool p1[100002],p2[1000002];int a1,a2,ans,a[1000002];	string s;
int finded(int g)
{
	int cnt1=0;
	for(int j=g;;j++){
		if(s[j]=='(')cnt1++;
		else if(s[j]==')')cnt1--;
		if(cnt1==0)return j;
	}
}
int main()
{

	cin>>s;//cout<<s.length();
	//if(s[0]=='1')a[0]=1;
	int cnt=0;
	for(int i=0;i<s.size();i++){
		if(p1[cnt])a[i]=1;
		if(s[i]==')'){
			if(a[i-1])	{
				for(int k=i;s[k]==')';k++){
					a[k]=1;//cout<<'b';
					
				}
			}
			p1[cnt]=p2[cnt]=0;cnt--;
			
		}
		if(!p1[cnt]&&!p2[cnt]&&s[i]=='1'){
			a[i]=1;//cout<<'a';
		}
		
		
		if((p1[cnt]||p2[cnt])&&s[i]=='('){
		
			i=finded(i);
			if(p1[cnt])	{
				for(int k=i;s[k]==')';k++){
					a[k]=1;//cout<<'b';
					
				}
			}
		}
		else if(s[i]=='(')cnt++;
		 	
		
		
		if((!p1[cnt]&&!p2[cnt])&&i){
			if(s[i]=='1'){
				if(s[i-1]=='|'){
					a[i]=1;//cout<<'c';
				}
				else if(s[i-1]=='&'&&a[i-2]){
					a[i]=1;//cout<<'d';
				}
				
			}
		}
		
		if(s[i]=='|'){
			if(!a[i-1])p1[cnt]=0,p2[cnt]=0;
			if(a[i-1]==1){
				p1[cnt]=1;
				a1++;
			}
		}
		if(s[i]=='&'&&p1[cnt]==0){
			if(a[i-1]==1)p2[cnt]=0;
			if(a[i-1]==0){
				p2[cnt]=1;
				a2++;
				
			}
		}
	}
	cout<<a[s.size()-1]<<endl;
	printf("%d %d\n",a2,a1);
	
/*	for(int i=0;i<s.size();i++){
		cout<<a[i]<<' ';
	}*/
	return 0;
	
} 

语言最朴实了

2023/8/30 14:41
加载中...