P7073 表达式(民间数据)
#include<bits/stdc++.h>
using namespace std;
long long n,t[1000005],e,data[1000005],date[1000005],o;
string s,s1;
stack <int> q;
int yi;
int main()
{
getline(cin,s);
cin>>n;
int k=0;
for(int i=1;i<=n;i++)
cin>>t[i];
for(int i=0;i<s.size();i++)
{
if(s[i]=='x')
{
s1[++yi]=char(t[s[i+1]-'0']+'0');
data[s[i+1]-'0']=yi;
}
if(s[i]=='&' || s[i]=='|' || s[i]=='!')
{
s1[++yi]+=s[i];
}
}
int m;
cin>>m;
for(int u=1;u<=m;u++)
{
int jl;
cin>>jl;
if(s1[data[jl]]=='0') s1[data[jl]]='1';
else s1[data[jl]]='0';
for(int i=1;i<=yi;i++)
{
if(s1[i]>='0' && s1[i]<='1') {q.push(s1[i]-'0');}
if(s1[i]=='&')
{
int a=q.top();
q.pop();
int b=q.top();
q.pop();
if(a==1 && b==1) q.push(1);
else q.push(0);
}
if(s1[i]=='|')
{
int a=q.top();
q.pop();
int b=q.top();
q.pop();
if(a==0 && b==0) q.push(0);
else q.push(1);
}
if(s1[i]=='!')
{
int a=q.top();
q.pop();
if(a==1) q.push(0);
else q.push(1);
}
}
date[u]=q.top();q.pop();
if(s1[data[jl]]=='0') s1[data[jl]]='1';
else s1[data[jl]]='0';
}
for(int i=1;i<=m;i++)
cout<<date[i]<<"\n";
return 0;
}
光荣爆0