zoukankan      html  css  js  c++  java
  • hihoCoder挑战赛29

    好难,不会做。

    1. 序列的值

    其实读完题还不是很理解题意,后来看的题解。数据范围1e5,显然枚举所有的子序列是不可能的,然后考虑每一个元素对结果贡献,问题就变成这个数在那些序列里面对结果的贡献会增加。这个情况是,该数最高为1的位,前面的数的异或该位为0的子序列,加上这个数构成的子序列才是满足要求的,如果前面xor的结果相应位为1,加上这个数的xor结果是要变小的。然后考虑有多少种这种情况,记这个数前面该位为1的个数为a,该位为0的个数为b,这个数后面的个数为n - 1 - a - b, 然后结果就是前面该位为1的数取偶数个,该位为0的个数随便, 后面也是所有的子集,然后结果就是 2^(a - 1) * 2^b * 2 ^(n - 1 - a - b), 然后所有的数加起来就是最后的答案。

    2.  快速乘法

    题意就是一个数二进制表示,通过加减使得二进制表示中1的个数最小。

    应该算原题吧: https://hihocoder.com/contest/hihointerview21/problem/3

    我直接从这里抄的答案,就过了。

    3. 太难,看题解,还需要fft这个东西,对我难度太大。

    4. 不上升序列

    看大家提交的速度很快,但是不会做。

    http://codeforces.com/contest/13/problem/C

    http://codeforces.com/contest/714/problem/E

    跟这个题目是一致的,但是本题数据范围很大。

    数据范围小的,可以采用n^2的dp,数据范围大的,只能采取优先队列, nlogn,这个做法是折线,拐点, 我不是很理解。

  • 相关阅读:
    L1和L2正则
    Python基础(一)
    消息分发
    StringList 自定义快速排序
    Delphi Length函数
    接口的委托实现(通过接口)
    接口委托实现--通过类的对象
    排序
    Socket编程(摘抄)
    Delphi线程同步
  • 原文地址:https://www.cnblogs.com/y119777/p/7097681.html
Copyright © 2011-2022 走看看