一种奇怪的做法,题解里似乎没有,但是正确性我不会证明
查看原帖
一种奇怪的做法,题解里似乎没有,但是正确性我不会证明
667448
go_deeper楼主2023/5/28 16:31

这是代码,大家能否帮我看看为什么对。

#define fer(i,a,n) for (int i=(a);i<=(n);++i)
#define rep(i,n,a) for (int i=(n);i>=(a);--i)
void solve() {
	ll n,x;
	cin>>n>>x;
	fer(i,0,60)
		if(!(n>>i&1)&&(x>>i&1)){none return;}
	ll ans=0;
	fer(i,0,60)if((n>>i&1)&&(x>>i&1))ans+=(1ll<<i);
	rep(i,60,0)if((n>>i&1)&&!(x>>i&1)){ans|=(1ll<<(i+1));break;}
	if((ans&n)>=x&&(ans==n||((ans-1)&n)>=x))cout<<ans<<'\n';
	else none
}
2023/5/28 16:31
加载中...