C艹 灵异事件
  • 板块学术版
  • 楼主lion0514
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/1/28 22:31
  • 上次更新2023/11/5 04:12:45
查看原帖
C艹 灵异事件
81708
lion0514楼主2021/1/28 22:31
//P7073 CSP-J2020 T3
#include<bits/stdc++.h>
using namespace std;
int q[1000006][2],l;
int a[100005];
char c[1000006];
int find(int x)
{
	return q[x][1]>=0?q[x][1]:q[x][1]=find(-q[x][1]);
}
int main(){
//	freopen("expr12.in","r",stdin);
	getchar();int xt;cin>>xt;c[1]=xt;
	for(l=2;getchar()==' ';++l)	{
		c[0]=getchar();
		if(c[0]=='x'){
			cin>>xt;
			c[l]=xt;
		}else{
			c[l]=-c[0];
		}
	}--l;//cout<<l<<'-';
	cin>>a[0];
	int k=1;
    for(;k<=a[0];++k)    cin>>q[k][0];--k;
    //请大家注意下面的for循环
	// 每当l数值非常大的时候,l在循环里就会时不时的变小
	//导致我这题一直40pts(}(·Д·){)
	//请问是为什么
	//或百度什么关键词可以查 
	for(int i=1,j=0;i<=l;++i){
		cout<<i<<' '<<l<<endl;
		if(c[i]>0){
            a[++j]=c[i];
		}else{
			
			if(c[i]==-'!'){
                q[a[j]][0]=1-q[a[j]][0];
            }
			if(c[i]==-'|'){
                ++k;
                q[k][0]=(q[a[j]][0]||q[a[j-1]][0]);
                if(q[a[j]][0]==1)q[a[j-1]][1]=0;
                else			 q[a[j-1]][1]=-k;
                if(q[a[j-1]][0]==1)q[a[j]][1]=0;
                else			   q[a[j]][1]=-k;
                a[--j]=k;
            }
			if(c[i]==-'&'){
                ++k;
                q[k][0]=(q[a[j]][0]&&q[a[j-1]][0]);
                if(q[a[j]][0]==0)q[a[j-1]][1]=0;
                else			 q[a[j-1]][1]=-k;
                if(q[a[j-1]][0]==0)q[a[j]][1]=0;
                else			   q[a[j]][1]=-k;
                a[--j]=k;
            }
		}
	}q[k][1]=1;
	int JoBi;cin>>JoBi;
	while(JoBi--){
		int x;cin>>x;
		if(q[x][1]<0)find(x);
		cout<<JoBi<<' '<<abs(q[k][0]-q[x][1])<<endl;
	}
}
2021/1/28 22:31
加载中...