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;
}

最新文章

  1. SOAPUI使用教程-REST源和方法
  2. C++基础_总结
  3. DB2 syntax error
  4. Maven重复类的解决
  5. mac配置svn服务器
  6. MonkeyRunner 连续两次点击报“Error sending touch event”
  7. 一次thinkphp框架 success跳转卡顿问题的解决
  8. 【基于微信小程序的社区电商平台】第一次迭代心得(非正式版本
  9. Elasticsearch系列(1):认识Elasticsearch
  10. 6-MVC结构简介
  11. app测试环境搭建(python)
  12. Spring Boot之JdbcTemplate多数据源配置与使用
  13. mysql 查询优化 ~ 善用profie利器
  14. C# Datatable排序(转)
  15. ORACLE删除某用户下所有对象
  16. 解决Qt Creator下 undefined reference to &#39;qmain(int,char**)&#39;的问题
  17. linux动态查看某组进程状态的办法
  18. 袋鼠云旗下新公司云掣科技启航,深耕云MSP业务助推企业数字化转型
  19. 1、改变 vs编辑器的主题
  20. MEF学习总结(2)---Primitive层

热门文章

  1. liunx下忘记root密码的解决方法
  2. Ubuntu启动项
  3. calendar.getTimeInMillis() 和 System.currentTimeMillis() 的区别
  4. H5移动端图片裁剪(base64)
  5. 运行powershell 脚本 在此系统上禁止运行脚本
  6. SAP成都研究院飞机哥:程序猿和飞机的不解之缘
  7. (转)SpringMVC学习(二)——SpringMVC架构及组件
  8. iview 验证 trigger: &#39;blur,change&#39;, 同时加两个,省的每次还想input 还是 select
  9. win10搭建Java环境
  10. webpack打包性能分析