为什么一分没有?样例都过了
查看原帖
为什么一分没有?样例都过了
349824
WsW_花逝爆零人楼主2020/11/19 21:28
#include<bits/stdc++.h>
using namespace std;
int n,q,a,l,k;
int f[1005];
char ch[1000005];
bool x[1005],x1[1005];
int find(int x){
	if(f[x]!=x)f[x]=find(f[x]);
	return f[x];
}
int main(){
    while(ch[k-1]!='\n'){
    	scanf("%c",&ch[k]);
    	k++;
	}
	cin>>n;
	l=strlen(ch);
	for(int i=1;i<=n;i++){
		cin>>x[i];
		f[i]=i;
		x1[i]=x[i];
	}
	cin>>q;
	while(q--){
		cin>>a;
		for(int i=1;i<=n;i++)x1[i]=x[i],f[i]=i;
		if(x1[a])x1[a]=0;
		else x1[a]=1;
		for(int i=0;i<l;i++){
			if(ch[i]=='!'){
				for(int j=i;j>=0;j--){
					if(ch[j]>='0'&&ch[j]<='9'){
						x1[find(ch[j]-'0')]=!x1[find(ch[j]-'0')];
//						printf("%cx%d=%d -----",ch[i],ch[j]-'0',x1[find(ch[j]-'0')]);
						break;
					}
				}
				continue;
			}
			if(ch[i]=='&'){
				int a,b,fa,fb,j;
				for(j=i;j>=0;j--){
					if(ch[j]>='0'&&ch[j]<='9'){ //找到一个数字! 
						fa=find(ch[j]-'0');     //找他爸爸 
//						printf("x%d ",ch[j]-'0');
						break;
					}
				}
				for(;j>=0;j--){
					if(ch[j]>='0'&&ch[j]<='9'){ //又找到一个数字! 
						if(find(ch[j]-'0')!=fa){
							fb=find(ch[j]-'0');
//							printf("%c x%d",ch[i],ch[j]-'0');
							break;
						} 
					}
				}
				x1[fa]=x1[fa]*x1[fb];
//				printf("=%d----",x1[fb]);
				f[fb]=fa;
				continue;
			}
			if(ch[i]=='|'){
				int a,b,fa,fb,j;
				for(j=i;j>=0;j--){
					if(ch[j]>='0'&&ch[j]<='9'){ //找到一个数字! 
						fa=find(ch[j]-'0');     //找他爸爸 
//						printf("x%d ",ch[j]-'0');
						break;
					}
				}
				for(;j>=0;j--){
					if(ch[j]>='0'&&ch[j]<='9'){ //又找到一个数字! 
						if(find(ch[j]-'0')!=fa){
							fb=find(ch[j]-'0');
//							printf("%c x%d",ch[i],ch[j]-'0');
							break;
						} 
					}
				}
				x1[fa]=x1[fa]+x1[fb];
//				printf("=%d----",x1[fb]);
				f[fb]=fa;                       //终极奥义·合并! 
				continue;
			}
		}
		printf("%d\n",x1[find(1)]);                //因为所有的都合并过了,所一随便输出一个(别告诉我你n=0) 
	}
}
2020/11/19 21:28
加载中...