过不了第八个点
查看原帖
过不了第八个点
224111
zysqh楼主2020/8/25 15:34

异常迷惑

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
string ch;
int x;
int f[100100][55];
int g[100100];
int num;
int ans[60];
int Final;
int now;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		cin>>ch;
		if(ch=="AND"){
			num=0;
			scanf("%lld",&x);
			g[i]=1;
			while(x){
				num++;
				f[i][num]=x&1;
				x>>=1;
			}
		}
		if(ch=="OR"){
			num=0;
			scanf("%lld",&x);
			g[i]=2;
			while(x){
				num++;
				f[i][num]=x&1;
				x>>=1;
				
			}
		}
		if(ch=="XOR"){
			num=0;
			scanf("%lld",&x);
			g[i]=3;
			while(x){
				num++;
				f[i][num]=x&1;
				x>>=1;
			}
		}
		
	}
	for(int i=1;i<=30;++i){
		int a1=0,a2=1;
		now+=(a2<<(i-1));
		for(int j=1;j<=n;++j){
			if(g[j]==1)a1&=f[j][i];
			if(g[j]==2)a1|=f[j][i];
			if(g[j]==3)a1^=f[j][i];
		}
		if(now>m)a2=0;
		for(int j=1;j<=n;++j){
			if(g[j]==1)a2&=f[j][i];
			if(g[j]==2)a2|=f[j][i];
			if(g[j]==3)a2^=f[j][i];
		}
		ans[i]=max(ans[i],max(a1,a2));
	}
	for(int i=30;i>=1;--i){
		Final+=(ans[i]<<(i-1));
	}
	printf("%lld",Final);
	return 0;
}
2020/8/25 15:34
加载中...