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):
(sequence B should also satisfy the rules described above)
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<