HDU-5536 Chip Factory,又见字典树,好题+1!
2024-10-13 00:31:54
Chip Factory
题意:一个n个数的数列,求三个数其中两个数的和与另外一个数的异或值最大,输出这个最大值。
思路:和前面那个百度之星资格赛HDU4825的类似,多了两个过程,一个是枚举和,另一个是删除过程,第一次写删除操作,还一遍A了,小激动。
会不会是后台水,东北师范官方没有给出标准测试数据,也就是说这数据是hdu YY的,我猜是这样,碰到过类似的情况,错误的代码竟然A了区域赛的题。这样为了AC貌似有点不好呀,不过思路很值得学习!
struct tree
{
int f;
tree *next[N];
tree()
{
for(int i=0; i<N; i++) next[i]=NULL;
f=0;
}
}*root;
int a[33];
ll s[1005];
void ch(ll x)//转化为二进制
{
memset(a,0,sizeof(a));
int len=0;
while(x)
{
a[len++]=x%2;
x/=2;
}
}
void insert(ll x)//插入一个数
{
ch(x);
int len=32;//长度最多32位
tree *p=root;
while(len>=0)
{
int id=a[len];
if(p->next[id]==NULL)
{
tree *temp=new tree;
p->next[id]=temp;
}
p=p->next[id];
p->f++;//每个点都构成一个数,经过此点,次数加一
len--;
}
}
ll query(ll x)
{
ch(x);
tree *p=root;
for(int i=0; i<33; i++) a[i]^=1;//不一定要这样,只是写HDU4825的时候用的这种思路
int len=32;
ll ans=0;
while(len>=0)
{
int id=a[len];
if(p->next[id]==NULL||p->next[id]->f==0) id^=1;//为0表示此节点被撤销了,另寻他路
if(id) ans+=(ll)1<<len;
p=p->next[id];
len--;
}
return ans^x;
}
void fre(ll x)
{
ch(x);
int len=32;
tree *p=root;
while(len>=0)
{
int id=a[len];
p->next[id]->f--;//撤销路径
p=p->next[id];
len--;
}
}
void del(tree *root)
{
for(int i=0; i<N; i++)
if(root->next[i])
del(root->next[i]);
delete(root);
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
root=new tree;
for(int i=0; i<n; i++)
{
scanf("%I64d",&s[i]);
insert(s[i]);
}
ll ans=0;
for(int i=0; i<n; i++)
{
fre(s[i]);
for(int j=i+1; j<n; j++)
{
fre(s[j]);
ans=max(ans,query(s[i]+s[j]));//撤销点,枚举和
insert(s[j]);
}
insert(s[i]);
}
printf("%I64d\n",ans);
del(root);
}
return 0;
}
最新文章
- SOAPUI使用教程-REST源和方法
- C++基础_总结
- DB2 syntax error
- Maven重复类的解决
- mac配置svn服务器
- MonkeyRunner 连续两次点击报“Error sending touch event”
- 一次thinkphp框架 success跳转卡顿问题的解决
- 【基于微信小程序的社区电商平台】第一次迭代心得(非正式版本
- Elasticsearch系列(1):认识Elasticsearch
- 6-MVC结构简介
- app测试环境搭建(python)
- Spring Boot之JdbcTemplate多数据源配置与使用
- mysql 查询优化 ~ 善用profie利器
- C# Datatable排序(转)
- ORACLE删除某用户下所有对象
- 解决Qt Creator下 undefined reference to &#39;qmain(int,char**)&#39;的问题
- linux动态查看某组进程状态的办法
- 袋鼠云旗下新公司云掣科技启航,深耕云MSP业务助推企业数字化转型
- 1、改变 vs编辑器的主题
- MEF学习总结(2)---Primitive层
热门文章
- liunx下忘记root密码的解决方法
- Ubuntu启动项
- calendar.getTimeInMillis() 和 System.currentTimeMillis() 的区别
- H5移动端图片裁剪(base64)
- 运行powershell 脚本 在此系统上禁止运行脚本
- SAP成都研究院飞机哥:程序猿和飞机的不解之缘
- (转)SpringMVC学习(二)——SpringMVC架构及组件
- iview 验证 trigger: &#39;blur,change&#39;, 同时加两个,省的每次还想input 还是 select
- win10搭建Java环境
- webpack打包性能分析