J. 找最小

  • “交换”其实是一个很抽象的操作
  • 因为你并不关心“交换”这个操作本身,而只关心它产生的影响
  • 考虑把“交换”具像化。它等价于将f(a)、f(b)同时异或上(ai^bi)
  • 引入线性基算法,问题解决
  • 其实你已经感受到了这种类似于“自动机”的感觉,也想到了线性基算法,但,对什么序列构建异或空间呢?a和b当然不行,因为你并不关心孤立的个体,而只关心它们联系产生的整体——ai^bi
  • 当你重新审视一道题目时,应当抛却最初的想法(按位考虑),这样,灵感火花才有迸发的空间
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int a[1000005],b[1000005],c[1000005];
int val[31];
void insert(int x)
{
	for(int i=30;i>=0;i--)
	{
		if(((x>>i)&1)==1)
		{
			if(val[i]==0)
			{
				val[i]=x;
				return;
			}
			else
			{
				x^=val[i];
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		memset(val,0,sizeof(val));
		int n,sum=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			sum^=a[i];
		}
		int tot=0;
		for(int i=1;i<=n;i++)
		{
			cin>>b[i];
			c[i]=(a[i]^b[i]);
			insert(c[i]);
			tot^=c[i];
		}
		int x=sum;
		for(int i=30;i>=0;i--)
		{
			if(max(x^val[i],x^val[i]^tot)<max(x,x^tot))
			{
				x^=val[i];
			}
		}
		cout<<max(x,x^tot)<<endl;
	}
	return 0;
}
posted @   D06  阅读(7)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
//雪花飘落效果
点击右上角即可分享
微信分享提示