设为首页 加入收藏

TOP

HDU - 5014 Number Sequence
2015-07-20 17:41:27 来源: 作者: 【 】 浏览:1
Tags:HDU 5014 Number Sequence

Problem Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules:

● a i ∈ [0,n]
● a i ≠ a j( i ≠ j )

For sequence a and sequence b, the integrating degree t is defined as follows(“?” denotes exclusive or):

t = (a 0 ? b 0) + (a 1 ? b 1) +???+ (a n ? b n)


(sequence B should also satisfy the rules described above)

Now give you a number n and the sequence a. You should calculate the maximum integrating degree t and print the sequence b.

Input There are multiple test cases. Please process till EOF.

For each case, the first line contains an integer n(1 ≤ n ≤ 10 5), The second line contains a 0,a 1,a 2,...,a n.

Output For each case, output two lines.The first line contains the maximum integrating degree t. The second line contains n+1 integers b 0,b 1,b 2,...,b n. There is exactly one space between b i and b i+1 (0 ≤ i ≤ n - 1). Don’t ouput any spaces after b n.

Sample Input
4
2 0 1 4 3

Sample Output
20
1 0 2 3 4
题意:求[0, n]的两个排列两两异或和的最大值
思路:算的上是一道规律题吧,拿5:101来说,能异或到的最大的数是111,那么就有(101,10)和(100,11)这两种,那么我们依次推下去求解
就是比如:0,1,2,3,4,5对应的值是:1,0,5,4,3,2,可以比较容易看到规律
#include 
   
    
#include 
    
      #include 
     
       #include 
      
        #include 
       
         typedef __int64 ll; //typedef long long ll; using namespace std; const int maxn = 100005; ll ans[maxn]; int n; int cal(int m) { int len = 0; while (m) { m >>= 1; len++; } return len; } ll init(int m) { ll sum = 0; while (m >= 0) { int len = cal(m); ll Max = (ll)(1<
        
         

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2014西安网络预选赛1003(DP+剪枝.. 下一篇HDU 5014 Number Sequence(西安..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)