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

    A. Inverse

    似乎这类问题的套路都是考虑每一个点对。

    然后考虑一个 dp 。

    设 $f_{k,i,j}$ 表示考虑后 $k$ 轮,最终 $i$ 在 $j$ 左面的方案数。

    对于每个 dp 值可以简单枚举翻转区间, $O(n^2)$ 转移。

    然后发现这个玩意可以优化,如果枚举翻转区间的左端点,那么问题是前缀和。

    然后发现现在的问题仍然是前缀和。

    所以对 dp 数组作两次前缀和就完事了。

    考场上看到这个 $n^2$ 的转移就人傻了,没有仔细去想这个式子。

    当发现可以搞个前缀和优化的时候时间已经不多了,所以有些遗憾。

    B. Subsequence

    观察样例可知一个结论,在 $i-1$ 的选择中出现的,在 $i$ 的选择中也会出现。

    所以可以考虑每步贪心选择当前最优。

    当选择了一个权值,贡献是前缀加当前点权值,后缀加自己点权值。

    可以把后缀加的部分视作斜率,于是得到一个简单的根号算法维护重构凸包的算法。

    因为评测机开了 noilinux,所以这个算法没戏。

    我还是太天真了,没有想象到 noilinux 的威力,所以挂成了暴力分。

    正解是一个平衡树维护差分 dp 数组的东西,两个月前打过。

    大概思想就是在平衡树上二分找到合适的位置,然后后缀加当前权值操作。

    C. Convex

    计算几何知识还是太差了。

    求多边形面积不一定非要选多边形上的点,选择原点然后跑叉积可能会大大减轻计算的难度。

    对于绝对值跑个类似旋转卡壳的东西就可以直接维护和。

    然后发现问题分两个部分,一部分形如 $sum limits_{i=l}^r (r-i)*v_i$。

    发现这个玩意作两遍前缀和,然后和前缀和搭配着用就可以解决了。

    另一部分形如 $sum limits_{i=l}^r A imes B_i$,其中 $A,B_i$ 为向量。

    解决这个问题的办法是对 $B_i$ 直接做个前缀和,化开叉积的式子就可以验证是正确的。

  • 相关阅读:
    [daily][archlinux][mdadm][RAID] 软RAID
    [daily] pandoc
    [knownledge][latex] LaTex入门
    [daily][mariadb][mysql] mariadb快速设置
    [daily][archlinux][btrfs][mysql] 在btrfs上使用mariadb
    [daily][archlinux][game] 几个linux下还不错的游戏
    [daily][gnucash] 复式记账
    [development][suricata] linux下一代权限控制 capabilities
    [DPI][suricata] suricata 配置使用
    [DPI][suricata] suricata-4.0.3 安装部署
  • 原文地址:https://www.cnblogs.com/skyh/p/12423166.html
Copyright © 2011-2022 走看看