C. Mikasa(位运算+贪心)

题目

题意

  • 输入 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;
}
posted @   俄罗斯刺沙蓬  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
返回顶端
点击右上角即可分享
微信分享提示