社区讨论

大佬帮忙,100分Unaccept,后面几个紫色RE

P8815[CSP-J 2022] 逻辑表达式参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo1mtnva
此快照首次捕获于
2023/10/22 23:37
2 年前
此快照最后确认于
2023/11/03 00:21
2 年前
查看原帖
CPP
#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;
	
} 
语言最朴实了

回复

5 条回复,欢迎继续交流。

正在加载回复...