求数据,或帮忙看看代码的问题
查看原帖
求数据,或帮忙看看代码的问题
643605
azaa414楼主2023/9/29 17:03

rt,模拟卡在70分上不去了,过样例和短一点的都能过,长一点的自带的样例3,4都过不去

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
#define l int
#define B bool
char s[1000010];
B f1,f2;
l ans1,ans2,len,n,q;
int numpd(int a)
{
	if(s[a]=='1'||s[a]=='0') return 1;
	if(s[a]=='&') return 2;
	if(s[a]=='|') return 3;
	return 0;
}
int main()
{
//	freopen("expr3.in","r",stdin);
	scanf("%s",s+1);
	len=strlen(s+1);
	for(l i=1;i<=len;++i)
	{
		switch(numpd(i))
		{
			case 1:
				n=s[i]-'0';
				break;
			case 2:
				if(!n) f1=1;
				break;
			case 3:
				if(n) f2=1;
				break;
		}
		ans1+=f1;ans2+=f2;
		if((f1||f2))
		{
			i++;
			if(s[i]!='(')
			{
				while(s[i]!='|'&&s[i]!=')'&&i<=len)
				{
					if(s[i]=='&'&&f1) ++ans1;
//					cout<<endl<<i<<endl;
					++i;
					if(s[i]=='(') {i--;ans1--;break;}
				}
				i--;
			}
			else
			{
				q=1;
				while(q)
				{
					++i;
					if(s[i]=='(')
					++q;
					if(s[i]==')')
					--q;
//					cout<<endl<<i<<endl;
				}
			}
		}
		f1=f2=0;
	}
	printf("%d\n%d %d",n,ans1,ans2);
	return 0;
}
2023/9/29 17:03
加载中...