CF1748D ConstructOR 题解
jiangtaizhe001 · · 题解
可能更好的阅读体验
题目传送门
题目大意
给定
题目解析
乍一看没什么思路,赛时想了很久才做出来。
显然当
首先我们发现要让两个数字都是
设
因为
从低位到高位考虑
因为
时间复杂度
ll a,b,c,d,ans; int cnt;
void work(){
a=read(); b=read(); c=a|b; d=read(); ans=0; int i;
cnt=0; for(i=0;i<30;i++) if(d&(1<<i)){ cnt=i; break; }
for(i=0;i<30;i++) if((c&(1<<i))&&!(ans&(1<<i))){
if(i<cnt){ puts("-1"); return; }
ans+=(d<<(i-cnt));
} print(ans),pc('\n'); assert((a|ans)%d==0&&(b|ans)%d==0); return;
}