输入 t(≤3e4) 表示 t 组数据,每组数据输入两个整数 n 和 m,均在 [0,1e9] 范围内。
定义数组 a = [n xor 0, n xor 1, n xor 2, ..., n xor m]。
输出mex(a)
思路
答案存在0 ~ m+1之间
设答案为 x ,那么必然存在一个y在0 ~ m之间,使得 n ^ y == x
因为n ^ y == x <=> n ^ x == y,得到结论n ^ x <= m
构造出能够使n ^ x <= m成立的最大x
从高位往低位,只有n为0,m为1的位置才可以让x为1(同时n < m才有解)
代码
void solve()
{
int n,m;cin >> n >> m;
if(n > m)
{
cout << 0 << endl;
return ;
}
int ans = 0;
m ++;
for(int i = 30;i >= 0 && n < m;i --)
{
if((n >> i & 1) < (m >> i & 1))
{
ans |= 1 << i;
n |= 1 << i;
}
}
cout << ans << endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具