zoukankan      html  css  js  c++  java
  • 模拟10 题解

    A. 辣鸡(ljh)

    模拟。

    对于同一块内的答案,直接统计。

    对于不同块内的,

    枚举i和大于i的$j=i+1~n$,

    一个有效的剪枝:

    以$x_1$为第一维排序,当$x_{1j}>x_{2i}+1$时break退出循环。

    然而如果用纵向链状的数据还是会被卡成$O(n^2)$,然而出题人没有卡。

    一个更好的方法是每次按不同条件排序,二分查找真正有效的区间并统计答案。

    总的氢键区间个数与N线性相关(至少我构造不出特殊数据),可以保证复杂度为排序和二分的$O(nlogn)$。

    然而我调不出来。

    B. 模板(ac)

    考场上打了70分算法:

    对于前30分,直接暴力翻父亲。

    然而我忘记了使用给定的桶数组,一分没有。

    对于k>=m的数据,无需考虑桶数组。

    由叶节点向根合并线段树即可。

    然而我的快读打错了,判断负号位置错了,只拿了15分。

    正解:

    以时间(操作时间)为下标的线段树,启发式合并。

    线段树中维护的是当前节点每个操作后的cnt(球的个数)和sum(答案)。

    处理每个节点的重儿子(在本题中为子节点数+操作数最大的儿子),

    对于每个节点,首先dfs轻儿子,并清空线段树。

    然后dfs重儿子,并将线段树继承。

    接着用另一个函数dfs每个轻儿子及轻儿子的子树,把这些信息补充到线段树里。

    线段树的信息完全了,我们的要求是 cnt数恰好为$k(x)$ 或 全部操作结束

    之前的sum值总和,以平衡树找k小值的思想,在线段树上二分查找即可统计该点的答案。

    应当注意的是,每种颜色的球只在它第一次出现,对答案作贡献。

    但第一次更新不意味着第一次出现,可以维护一个数组表示每个颜色第一次出现的位置,可以更新数组时就更新。

    关于复杂度:

    每次对于一个节点,继承它的重儿子的信息。

    因为每个节点到根节点的轻边数不超过$logn$,

    所以每个节点当且仅当它的祖辈被当作轻儿子时被dfs扫描,

    所以每个节点被dfs不超过$logn$次。

    线段树单次操作为$O(nlogn)$,故总复杂度为$O(nlog^2n)$

    C. 大佬(kat)

    最简单的一道题,然而考场上只想到了k=2的做法,打了n<=8的暴搜。

    当时的想法是:

    第一道题只在第一天有效,最后一道题只在最后一天有效,

    然而中间的题会在总共k天有效,显然不能处理每个k道题,最后乘$(n-k+1)$啊。

     

    然而被事实打败了:

    不妨考虑方案数,不管在哪一位,每种状态的方案数都是相同的。

    处理每个k道题,

    以下三式中g(x)均为k道题中最大难度为x的方案种数。

    $ans=frac{sumlimits_{i=1}^{m}g(i)*w[i]}{m^k}*(n-k+1)$

    即化为总权值,除以总方案数,得到期望。

    柿子一:$g[x]=x^k-(x-1)^k$

    则每道题有x种选择,要除掉不合法的状态,即最大难度不是x,

    根据简单的容斥,答案为$x^k-(x-1)^k$。

    以下两式参考Yu-shi

    柿子二(DuanYue):$g[x]=sumlimits_{i=1}^{k}C_k^i(x-1)^{k-i}$

    组合数的理解,比较显然。

    枚举从k中选取几个最大值,其他在最大值一下随便选取,求和为答案。

    柿子三(remarkable):$g(x)=sumlimits_{i=0}^{k-1}x^i(x-1)^{k-1-i}$

    不会直观理解,但是是对的。

    由数学归纳法,

    显然当$x=1$时,$g(x)=1$,是正确答案。

    当$x>1$,$g(x)=g(x-1)*x+x^0*(x-1)^{k-1}$,

    $g(x-1)$为$x-1$时的合法方案,一定包含至少一个最大值,所以第k位可以任意选择。

    $(x-1)^{k-1}$为$x-1$时的非法方案,第k位必须选择最大值。

    且后者一定不包含最大值,所以两者相加是不重不漏的。

  • 相关阅读:
    iOS 有用的代码片段
    iOS 限制软盘输入法
    UIlabel 遇到\n 换行iOS
    关于delegate 与 protocol 的理解 iOS
    ios 跳转到app store
    iOS 上下左右滑动手势
    求某段程序运行的高精度时间
    转载——GDB中应该知道的几个调试方法
    文章翻译——使用 GNU 的 GDB调试器,内存布局和栈——01
    第十章扩展——__cdecl 的压栈方式——printf
  • 原文地址:https://www.cnblogs.com/skyh/p/11270314.html
Copyright © 2011-2022 走看看