`
Simone_chou
  • 浏览: 192666 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Number Sequence(二进制)

    博客分类:
  • HDOJ
 
阅读更多

Number Sequence

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1886    Accepted Submission(s): 561
Special Judge


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

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

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

t = (a0 ⊕ b0) + (a1 ⊕ b1) +···+ (an ⊕ bn)

(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 ≤ 105), The second line contains a0,a1,a2,...,an.
 

 

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

 

Sample Input
4
2 0 1 4 3
 

 

Sample Output

 

20
1 0 2 3 4

 

     题意:

     给出 N ,后给出 N 个数,它是一个 0 ~ N 的排列,找出一个序列对应式子异或和最大。

 

     思路:

     将数变为二进制考虑,会发现每个数都会有对应有一个 “ 使之变为该二进制位数全为 1 ” 的数。这样子就能解决问题了,总和就是化为全为 1 时候对应的十进制值,对应的数就是这个和减去这个值的得数。

 

     AC:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <cmath>

using namespace std;

typedef long long ll;

ll num[100005];
ll num1[100005];

ll Bit (ll ans) {
    ll bb = 0;
    while (ans) {
        ++bb;
        ans /= 2;
    }
    return bb;
}

int main() {

    int n;

    while (~scanf("%d", &n)) {
        for (int i = 0; i <= n; ++i) {
            scanf("%I64d", &num[i]);
        }

        memset(num1, -1, sizeof(num1));

        ll sum = 0;
        for (ll i = n; i >= 0; --i) {
            if (num1[i] == -1) {
                ll bb = Bit(i);
                ll ans = pow(2, bb) - 1;
                sum += ans * 2;
                num1[i] = ans - i;
                num1[ans - i] = i;
            }
        }

        if (num1[0] == -1) num1[0] = 0;

        printf("%I64d\n", sum);
        for (int i = 0; i <= n; ++i) {
            printf("%I64d", num1[num[i]]);
            i == n ? printf("\n") : printf(" ");
        }
    }

    return 0;
}

 

分享到:
评论

相关推荐

    python实现位操作 Bit Manipulation 课程设计

    二进制和运算符 二进制计数设置位 二进制计数尾随零 二进制或运算符 二进制移位 二进制二进制补码 二进制异或运算符 计数 1S 布赖恩·克尼汉方法 计算 1 位数 格雷码序列 最高设置位 最右边设置位的索引...

    香港交易所Orion市场数据平台OMD-C二进制接口规范详解

    内容概要:本文档详细规定了香港交易所(HKEX) Orion市场数据平台(OMD)证券市场与指数数据馈送产品的二进制接口规范。主要包括系统概述、消息格式、恢复机制和聚合订单管理等内容,旨在提供可靠的数据接口和服务。...

    移动通信专业英文词汇.docx

    1. **比特数 (bit number)**:比特是信息的基本单位,代表二进制位,可以是0或1。1/4比特数可能指的是数据传输过程中的最小传输单位。 2. **AGC (Automatic Gain Control)**:AGC是一种自动调整接收机增益的技术,...

    包含中国移动、中国联通、中国电信、中国网通及短信中心短信网关模拟器

    服务端自动生成序列号(SequenceNumber) 4.全中文解析及二进制格式包内容显示 中国电信小灵通SMGP模拟器: 概述:基于最新的SMGP v3.0 v2.0协议开发,增加了对交易请求消息的支持,具有方便易用图形化的界面,专业...

    acm 动态规划总结,关于背包问题

    我们可以维护一个二维数组array[i][0]和array[i][1],分别表示i位二进制数中以0和1结尾的数的个数。这个问题的动态规划状态转移方程与斐波那契数列类似。 最后,Pku ACM 1458 "Common Subsequence" 是一个寻找两个...

    hibernate映射类型.doc

    12. `byte[]`: 映射到 `Blob`,用于存储二进制大对象,如图片或文档。 13. `String`: 映射到 `CLOB` (Oracle的 `Clob`),用于存储字符大对象,如长文本。 14. `java.sql.Clob`: 直接映射到 `CLOB` (Oracle的 `Clob`)...

    使用wireshark检测RTP丢包问题.docx

    RTP序列号是一个16位的无符号二进制整数,并且以1个步长逐步递增。当序列号递增到最大值时,会自动恢复为0。这被称为wrap-around。 RTP序列号的一个主要用途是丢包检测。当接收方发现序列号出现以大于1的步长跳跃的...

    动态规划详细教程

    这个问题可以通过动态规划解决,定义一个状态数组`dp`,其中`dp[i]`表示长度为`i`的二进制串中不含相邻1的个数。状态转移方程可以为`dp[i] = dp[i-1] + dp[i-2]`,因为对于长度为`i`的串,其最后一位可以是0或1,但...

    asn.1的ber编码

    - **Account Content**: `0000000010000001` (整数值129的二进制表示) #### 四、总结 通过以上介绍,我们可以看出ASN.1是一种强大且灵活的数据定义语言,能够很好地适应各种通信场景的需求。BER编码规则作为其核心...

    hex格式redo log解析

    由于给定内容没有提供完整的insert语句信息,我们只能假设它会包含SQL操作的详细描述,如操作类型(INSERT)、受影响的表空间和数据块、行ID以及插入的值的二进制表示。 在实际的redo log分析中,通常会使用特定的...

    number of digit Fibonacci.Stellen.pdf

    文档没有直接提及,但斐波那契数列的性质在不同的进制下有所不同,特别是在二进制和十进制之间。虽然该文档并未涉及进制变化对斐波那契数性质的影响,但这是一个相关话题。 通过上述解释,我们可以看出文档涉及的...

    动态规划练习题目!!

    - **二进制位操作**:在处理二进制数相关问题时,动态规划可以帮助找到问题的数学规律,并逐步求解出结果。 #### 动态规划的扩展应用 - **时间复杂度和空间复杂度**:动态规划通常具有较高的空间复杂度,因为需要...

    Java网络编程--TCP网络编程(tcp缩略语)

    IP地址分为IPv4和IPv6两种,前者由32位二进制组成,后者扩展到了128位。TCP/IP协议还涉及到IP分片和重组,其中DF(Don't Fragment)标志用于禁止IP分片。 进程间通信(IPC)是多线程或多进程应用程序中不同进程间...

    ACM动态规划总结

    动态规划的解决方案通常涉及构造一个数组,数组的每个元素代表n位二进制数中最后一位为0或1的数的数量。从n=1开始,根据前一位的值递推计算当前位的值,从而得到所有可能的非相邻1的组合。 在解决这些问题时,动态...

    数据库常用对象对象(共91张PPT).pptx

    Oracle支持多种数据类型,如VARCHAR2(变长字符串)、CHAR(固定长度字符串)、NUMBER(数值,可指定精度和小数位数)、DATE(日期和时间)、LONG(大文本数据)、CLOB(大字符数据)、RAW和LONG RAW(二进制数据)...

    (lecture_02)简单数学题090223.ppt

    Problem B: Number Sequence是一道需要发现规律的题目。在ACM竞赛中,观察数据规模,寻找模式是解题的关键。对于这类问题,避免暴力枚举,尝试归纳总结,有时还需要用到数论知识。 总的来说,ACM竞赛中的数学题...

    oracle自带建表命令

    2. **数据类型**:Oracle支持多种数据类型,包括数值型(如NUMBER,INTEGER)、字符型(如VARCHAR2,CHAR)、日期时间型(如DATE,TIMESTAMP)、二进制型(如BLOB,RAW)等。选择合适的数据类型对于存储和检索数据至...

    oracle_mysql系统移植方案[参照].pdf

    - Oracle和MySQL都支持BLOB类型,用于存储大量二进制数据。虽然类型名称相同,但在处理BLOB时仍需注意两者间的操作差异。 4. **视图**: - MySQL的视图在创建时有一些限制,例如SELECT语句不能包含某些特定操作,...

    MATLAB OFDM卷积编码程序及代码.docx

    程序首先获取输入二进制数的位数,然后通过循环计算每一位的值,并累加得到最终的十进制数值。 ```matlab function y = bin22deci(x) t = size(x, 2); y = zeros(size(x, 1), 1); for j = 1:size(x, 1) y(j) = rem...

Global site tag (gtag.js) - Google Analytics