链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014

题意:给出范围N,给出0-N的一个排列a。让你求出另外一个排列b,使 t = a1 ^ b1 + a2 ^ b2 + ...+an ^ bn(^表示异或)最大。并求出最大的t。

思路:首先,我们要注意到的是,一定存在解,且解不唯一。同时,因为是异或操作,要想得到最大值,我们必须让ai,bi对应的二进制表示,0和1错开,这样才不会使值减少。

这样,我们要构造出错开的0和1的二进制表达即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=100100;
long long a[maxn],ans[maxn];
int main()
{
int n;
while(cin>>n)
{
memset(ans,-1,sizeof(ans));
for(int i=0;i<=n;i++)
scanf("%d",&a[i]);
long long maxnum,xornum;
long long masnum=0;
for(int i=n;i>=0;i--)
if(ans[i]==-1)
{
long long x=log2(i)+1;
maxnum=(1<<x)-1;
xornum=maxnum^i;
if(ans[xornum]==-1)
{
ans[i]=xornum;
ans[xornum]=i;
masnum+=2*maxnum;
}
}
printf("%I64d\n",masnum);
for(int i=0;i<=n;i++)
printf("%I64d ",ans[a[i]]);
printf("\n");
}
return 0;
}

最新文章

  1. centos下安装yaf框架
  2. tail 命令 查看Tomcat目录下日志的最后几行的方法
  3. perl 入门的基础
  4. hdu acmsteps 2.1.8 Leftmost Digit
  5. JQuery文件上传插件uploadify在MVC中Session丢失的解决方案
  6. flask-cors 实现跨域请求
  7. vb.net中常用键值
  8. bzoj 3632: 外太空旅行 最大团
  9. 【最大流之sap】【HDU1532】模板题
  10. mantis 中文统计报表乱码问题解决办法
  11. Cache 在选择的几点思考
  12. 如何在网页标题栏title加入logo图标?
  13. 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
  14. C# 委托链(多播委托)
  15. oo第二单元作业总结
  16. 锤子科技&quot;临死前&quot;被&quot;接盘&quot; ,内部人士爆料已改签今日头条母公司
  17. tomcat 端口修改和内存配置
  18. Java中实现多线程继承Thread类与实现Runnable接口的区别
  19. strlen()和mb_strlen()
  20. Delphi获取IdHTTP1.Get(url)的返回参数

热门文章

  1. [HNOI2009]梦幻布丁(链表+启发式合并)
  2. CF778A:String Game
  3. SystemInformationRequestHandlers
  4. 前端学习之-- DOM
  5. Java中@SuppressWarnings注解用法(转)
  6. Spring MVC 异步处理请求,提高程序性能
  7. 学习swift从青铜到王者之Swift语言函数05
  8. Linux 快照
  9. react-document-title
  10. 【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用