zoukankan      html  css  js  c++  java
  • 省选模拟46 题解

    A. 俄罗斯方块

    一道很神奇的 bitset 题。

    考虑维护每个格子最上面属于哪个块,这个东西可以用一个 set 来维护每个连续段,操作方法类似珂朵莉树。

    对于每次操作,直接用 set 遍历每个有交的连续段,询问并取 $max$,以得到当前的高度,然后进行覆盖操作。

    所以现在的问题是,有一个块 $b$ ,起点为 $s_b$,一个块 $a$,起点为 $s_a$,问落下后的高度。

    容易发现并不关注具体的 $s_a,s_b$ ,只关注 $s_a-s_b$。

    然后考虑一个暴力做法,枚举答案,然后类似卷积的再枚举每一层,bitset 判断是否有交。

    同时,对已经计算过的三元组 $(id_a,id_b,s_a-s_b)$ 进行记忆化操作。

    这样的话总复杂度不超过 $O(frac{S^2}{64})$ ,其中 $S$ 表示总面积,因为每个点对显然只被计算了一次。

    但是有个小问题,当块 $a$ 或块 $b$ 的宽度小于 $64$,导致这个 $64$ 除不掉了,所以暴力计算。


    B. 能力强化

    与 uoj 喂鸽子很像。

    大概的思想是,将全部覆盖通过 $Min-Max$ 容斥转化为覆盖一个。

    然后发现每个物品是一样的,所以只考虑覆盖的个数乘上组合数即可。

    这样的话可以设 $g_{i,x}$ 表示前 $i$ 个物品,用了 $j$ 步,然后一个都没覆盖成功的方案数。

    $g$ 数组的求法先 dp,然后用一个简单的 $EGF$ 就可以了。

    有了 $g$ 数组,可以通过枚举第 $i+1$ 个物品用了多少步填满,计算 $i+1$ 个元素中覆盖了一个的期望。

    C. 将军棋

    毒瘤提答题。

  • 相关阅读:
    根据 谷歌官网写一个 该浏览器上的扩展
    深度学习
    华为在线学习
    pandas 常规操作大全
    猎奇有些意思的
    LINUX 必知必会检测表--通读无关语言
    自动化部署三剑客 gitlab + ansible + jenkins
    python 框架
    delphi 多线程之System.TMonitor
    函数和对象 及 prototype和__proto__
  • 原文地址:https://www.cnblogs.com/skyh/p/12506989.html
Copyright © 2011-2022 走看看