zoukankan      html  css  js  c++  java
  • 山东省队集训整理

    (LOJ6059)

    首先考虑一个数位 (DP) 的思路。(f_{i , j , k}) 表示前 (i) 位 , 模 (p) 的值为 (j) , 每位之和为 (k) 的方案数。
    发现 (n) 很大 , 那么倍增优化即可。
    时间复杂度 : (O(mplogmlogn))

    (LOJ6060)
    记整个集合的异或和为 (S)
    对于 (S) 中为 (0) 的位 , 我们希望其在两个集合中都是 (1) , 而对于 (S) 中为 (1) 的位就不需要考虑了 , 但按照题目中所说的 , 要使第 (1) 个集合的异或和尽可能小。
    因此将为 (0) 的位从大到小放在前面 , 为 (1) 的位从大到小放在后面 , 插入线性基即可。
    时间复杂度 : (O(NlogN))

    (LOJ6062)
    考虑霍尔定理 , 线段树维护即可。
    时间复杂度 : (O(NlogN))

    (LOJ6066)
    首先二分答案。
    将树写成括号序列后用可持久化线段树维护哈希值。 并使用平衡树记录哈希值的集合。
    时间复杂度 : (O(Nlog^2N))

    (LOJ6068)
    考虑行联通块对列联通块连边 , 这样建出了一个二分图模型。
    将行 / 列的边权定义为差分值 ({i(i + 1)} over {2}) - ({i(i-1)} over {2}) = (i)
    直接运行费用流即可。
    时间复杂度 : (O(CostFlow(N ^ 2 , N ^ 2)))

    (LOJ6066)
    首先得到一个排列 (P) , 设 (S = sum{max(P_{i - 1} , P_{i})}) , 那么 (S + 1) 就是紧密排列起来的长度。
    还剩下的 (l - (S + 1)) 个格子 , 将其插入在剩余的空位中 , 其方案数为 ({l - S - 1 + n choose n})
    因此要求的是 (S = k) 的方案数。
    这是个经典问题 , 设 (dp_{i , j , k}) 表示前 (i) 个数 , 整个序列分为 (j) 个联通块 , 排列总长度为 (k) 的方案数。 直接转移即可。
    现在问题转化为求 ({L choose 0..n}) , 注意到 (L) 很大 , 但 (n) 很小 , 因此矩阵快速幂即可。
    时间复杂度 : (O(N ^ 3logL))

    (LOJ6072)
    生成树计数 , 二项式反演 , 折半搜索。
    具体不赘述了。 时间复杂度 : (O(2 ^ N(n+m)))

  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/evenbao/p/13709284.html
Copyright © 2011-2022 走看看