• 正睿十连测 第一天 简要题解


    (A.Stone)
    首先有一个结论是 , 任意一个数 (n) 都可以拆成 (3) 个形如 ({k choose 2}) 的数的和。
    因为 (3k^2 - 3k + 1 = 6{k choose 2} + 1) , 所以对于任意一个数 (n) ,最多需要 (8) 个这样的数就能将其组合出。
    接着, 我们注意到 (6{k choose 2} + 1 equiv 1 (mod 6)) ,那么有 (ans equiv n(mod 6)) , 因此只需判断 (ans)(1) 还是 (8) , 是 (2) 还是 (6)
    注意到 (10^{11}) 内的形如 (3k ^ 2 - 3k + 1) 的数是根号级别的。 于是直接预处理这些数。 对于第一种情况二分求解 , 第二种情况 (two-pointers) 扫描, 即可。
    时间复杂度 : (O(sqrt {limit}))(limit = 10 ^ {11})
    (B. Palindrome)
    首先做一遍 (Manacher) 算法。
    枚举 (1 over 3) 处 , 用扫描线 + (BIT) 维护。
    时间复杂度 : (O(NlogN))
    (C. Random)
    首先我们知道随机树高是 (sqrt n)级别的。
    由期望的线性性质 , 我们不妨对于每个点计算贡献, 那么每个点最多有 (sqrt n) 个祖先。
    问题转化为 ,有一个数组 , (a_{1} , a_{2} , a_{3} , ...... , a_{m}) , 选择一个排列 ,每次将当前数及后面的数加上其权值, 最后问第 (m) 个位置上的数的期望。
    我们发现这个贡献等价于以 (1) 为开头的上升子序列数量 , 那么直接用组合数的一些技巧就行了。
    时间复杂度 : (O(n sqrt n))

  • 相关阅读:
    mr程序无法输出日志进行调试的解决方法
    2015年度总结
    Hadoop数据目录迁移
    Oracle数据迁移至HBase操作记录
    Hadoop端口一览表
    Hadoop Maven pom文件示例
    十个书写Node.js REST API的最佳实践(下)
    iOS 程序从开发完到上 AppStore 那点事儿
    拿什么拯救你,我的三十五岁
    Spark 以及 spark streaming 核心原理及实践
  • 原文地址:https://www.cnblogs.com/evenbao/p/13585015.html
Copyright © 2020-2023  润新知