脑子不好MLE了……
查看原帖
脑子不好MLE了……
759765
jinzihan0127楼主2023/8/8 19:58
#include <bits/stdc++.h>
using namespace std;
#define MAX(a, b) ((a)>(b)?(a):(b))
#pragma GCC optimize(3,"Ofast","inline")
struct data{
	bool e;
	int a,x,y,z;//a:值 x:左子树 y:右子树 z:父节点 e:是否无效 
}a[100001];
int n;
string q[1000001];
stack<int> w;
int aaa(string a) {
	int i=0;
	while(!(a[i]>='0'&&a[i]<='9')&&i<a.length())i++;
	int sum=0;
	while(i<a.length()) {
		sum*=10;
		sum+=int(a[i]-'0');
		i++;
	}
	return sum;
}
void dfs(int x){
	if(a[x].x==0&&a[x].y==0){
		a[x].e=true;
		return ;
	}
	if(a[x].x!=0)dfs(a[x].x);
	if(a[x].y!=0)dfs(a[x].y);
	return ;
}
int main() {
	int s=0;
	while(!(q[s].length()==1&&q[s][0]>='0'&&q[s][0]<='9')) {
		cin>>q[++s];
	}
	n=aaa(q[s]);
	int k=n+1;for(int i=1; i<=n*3; i++)a[i].z=i;
	for(int i=1;i<=n;i++)cin>>a[i].a;
	for(int i=1; i<=s-1; i++) {
		if(q[i][0]=='x')w.push(aaa(q[i]));
		else {
			if(q[i][0]=='!') {
				int x=w.top();
				w.pop();
				w.push(k);
				a[x].z=a[k+1].z=k;
				a[k].x=x;
				a[k].y=k+1;
				a[k].a=!a[x].a;
				k+=2;
			} 
			else {
				int x=w.top();
				w.pop();
				int y=w.top();
				w.pop();
				if(q[i][0]=='&') {
					w.push(k);
					a[x].z=a[y].z=k;
					a[k].a=a[x].a&a[y].a;
					a[k].x=x;
					a[k].y=y;
					if(a[x].a==0)dfs(y);
					if(a[y].a==0)dfs(x);
					k++;
				} else {
					w.push(k);
					a[x].z=a[y].z=k;
					a[k].a=a[x].a|a[y].a;
					a[k].x=x;
					a[k].y=y;
					if(a[x].a==1)dfs(y);
					if(a[y].a==1)dfs(x);
					k++;
				}
			}
		}
	}
	k--;
  int m,sum;
  cin>>m;
  for(int i=1;i<=k;i++)if(a[i].z==i){
  	sum=a[i].a;
  	break;
	}
  for(int i=1;i<=m;i++){
  	int d;cin>>d;
  	if(a[d].e)cout<<sum;
  	else cout<<!sum;
  	cout<<"\n";
	}
	return 0;
}

本蒟蒻不会输入输出,用了一个string数组后就MLE了,还有两个RE(悲)

求帮看!

2023/8/8 19:58
加载中...