WA-2,4,6,8,10求助
查看原帖
WA-2,4,6,8,10求助
127299
Young_Zn_Cu楼主2020/12/2 09:28
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=100000+5;
int n,m,a[N],b[N],tot;
ll ans,tmp1,tmp2,tmp;
inline int read(){
	int cnt=0,f=1;char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}
	while(isdigit(c)){cnt=(cnt<<1)+(cnt<<3)+(c^48);c=getchar();}
	return cnt*f;
}
inline ll cnt(ll num){
	for(int i=1;i<=n;++i){
		if(a[i]==1) num=num&b[i];
		else if(a[i]==2) num=num|b[i];
		else num=num^b[i];
	}
	return num;
}
signed main(){
	freopen("sleep.in","r",stdin);
	freopen("sleep.out","w",stdout);
	n=read(),m=read();
	char s[N];
	for(int i=1;i<=n;++i){
		scanf("%s",s+1);b[i]=read();
		if(s[1]=='A') a[i]=1;
		else if(s[1]=='O') a[i]=2;
		else a[i]=3;
	}
	tmp1=cnt(0ll);
	tmp=0,tot=0,ans=0;
	do{
		tmp=tmp<<1ll,tmp=tmp|1ll,++tot;
	}while(tmp<m);
	tmp2=cnt(tmp);
	for(int i=tot-1;i>=0;--i) if((tmp1&(1ll<<i))==0&&(tmp2&(1ll<<i))==1&&((ans|(1ll<<i))<=m)) ans=ans|(1ll<<i);
	cout<<cnt(ans)<<endl;
	return 0;
}
2020/12/2 09:28
加载中...