这个代码超时不要紧,还没加优化,可是为什么答案错误,有大佬帮忙看看吗?
#include<iostream>
#include<cstdio>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<deque>
#include<vector>
#include<queue>
#include<string>
#include<cstring>
#include<map>
#include<stack>
#include<set>
using namespace std;
map<string,bool>f;
string s;
struct asd{
int left,right;
string dx;
}tree[1000000],f1[1000000];
int n,m,x,a[10000000],z1,bh[1000000],z,t;
string jq(string s,int a){
string y="";
for(int i=a;i<=s.size()-1;i++){
if(s[i]==' ') return y;
y+=s[i];
}
return y;
}
void js(){
int u=0,l=s.size()-1;
while(u<=l){
string o=jq(s,u);
u+=o.size()+1;
if(o[0]=='x'){
f1[++z1].dx=o;
f1[z1].left=0;
f1[z1].right=0;
bh[z1]=0;
}
if(o=="!"){
int head=z+1;
tree[++z].dx=o;
if(bh[z1]==0){
tree[++z]=f1[z1--];
tree[head].left=z;
}else{
tree[head].left=bh[z1--];
}
f1[++z1]=tree[head];
bh[z1]=head;
}
if(o=="&"||o=="|"){
int head=z+1;
tree[++z].dx=o;
if(bh[z1]==0){
tree[++z]=f1[z1--];
tree[head].left=z;
}else{
tree[head].left=bh[z1--];
}
if(bh[z1]==0){
tree[++z]=f1[z1--];
tree[head].right=z;
}else{
tree[head].right=bh[z1--];
}
f1[++z1]=tree[head];
bh[z1]=head;
}
}
t=bh[1];
}
bool qz(int l){
if(tree[l].dx[0]=='x'){
return f[tree[l].dx];
}
if(tree[l].dx=="!") return !qz(tree[l].left);
if(tree[l].dx=="&") return qz(tree[l].left)&qz(tree[l].right);
if(tree[l].dx=="|") return qz(tree[l].left)|qz(tree[l].right);
}
int main(){
// freopen("expr.in","r",stdin);
// freopen("expr.out","w",stdout);
getline(cin,s);
js();
cout<<t<<endl;
for(int i=1;i<=z;i++){
cout<<tree[i].dx<<" "<<tree[i].left<<" "<<tree[i].right<<endl;
}
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
string k="x";
k+=(char)(i+'0');
f[k]=a[i];
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d",&x);
string k="x";
k+=(char)(x+'0');
f[k]=!f[k];
printf("%d\n",qz(t));
// cout<<(int)(qz(t))<<endl;
f[k]=!f[k];
}
}