求助
查看原帖
求助
158400
晴空一鹤楼主2020/11/26 21:02

90pts求助

#include<bits/stdc++.h>
using namespace std;
vector<int>q[1000000];
int qqq[100001];
int aa[100001],lll;
char b[1000001];
int bc[1000001];
int cnt=0,cnt2=0; 
string a;
struct node
{
    int cnt;
    bool x;
}t,tt;
stack<node>qq;
void huo()
{
    tt=qq.top();
    qq.pop();
    t=qq.top();
    if(tt.x==1&&t.x==1)
    qq.top().cnt=0;
    if(tt.x==0&&t.x==1)
    q[tt.cnt].clear(); 
    if(tt.x==1&&t.x==0)
    {
        q[qq.top().cnt].clear();
    	qq.top().cnt=tt.cnt;
        if(qq.top().cnt==0)
        qq.top().cnt=cnt++;
	}
	if(tt.x==0&&t.x==0)
	{
        if(qq.top().cnt==0)
        qq.top().cnt=cnt++;
        if(tt.cnt!=0)
		q[qq.top().cnt].push_back(tt.cnt);
	}
	qq.top().x=tt.x|t.x;
}
void yu()
{
    tt=qq.top();
    qq.pop();
    t=qq.top();
    if(tt.x==0&&qq.top().x==0)
    qq.top().cnt=0;
    if(tt.x==1&&qq.top().x==0)
    {
    	q[tt.cnt].clear();
	}
    if(tt.x==0&&qq.top().x==1)
    {
        q[qq.top().cnt].clear();
    	qq.top().cnt=tt.cnt;
        if(qq.top().cnt==0)
        qq.top().cnt=cnt++;
	}
	if(tt.x==1&&qq.top().x==1)
	{
        if(qq.top().cnt==0)
        qq.top().cnt=cnt++;
        if(tt.cnt!=0)
		q[qq.top().cnt].push_back(tt.cnt);
	}
	qq.top().x=tt.x&t.x;
}
void ycl()
{
    cnt=1;
    for(int i=1;i<=cnt2;i++)
    {
        if(bc[i]<1000010)
        {
            t.x=aa[bc[i]];
            q[cnt].push_back(bc[i]);
            t.cnt=cnt++;
            qq.push(t);
        }
        else
        {
            char t=b[bc[i]-1000010];
            if(t=='|')
              huo();
            else
              if(t=='&')
                yu();
              else
              qq.top().x=!qq.top().x;
        }
    }
}
void inline pd(int x)
{
    for(int i=0;i<q[x].size();i++)
    {
    if(i>0)
    pd(q[x][i]);
    else
    qqq[q[x][0]]=1;
    }
}
int main()
{
    getline(cin,a);
    for(int i=0;i<a.size();i++)
    {
        ++cnt2;
        while(i<a.size()&&a[i]!=' ')
        {
            if(a[i]=='x')
            {i++;
                while(i<a.size()&&a[i]!=' ')
                {
 
                     bc[cnt2]=bc[cnt2]*10+a[i]-'0';
                     i++;
                }
                break;
            }
            b[++cnt]=a[i++];
            bc[cnt2]=cnt+1000010;
        }
    }
    int n,ql;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>aa[i];       
    ycl();
   pd(qq.top().cnt);
	cin>>ql;
    for(int i=1;i<=ql;i++)
	{
	cin>>lll;
		if(qqq[lll])
		cout<<!qq.top().x<<endl;
		else
		cout<<qq.top().x<<endl;
	}
 
}
2020/11/26 21:02
加载中...