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

    题解

    排队

    20% $1le nle 20, 1le x,h_ile 20$ 随便暴力

    50% $1le n le 2000, 1le x,h_ile 1e9$ 枚举把哪个定成中位数

    100% $1le nle 2e5,1le x,h_ile 1e9$

    先把高度排序。贪心地修改。最好的方法是把最中间的人变成$x$。那么就把左边比他高的或者右边比他矮的都改成$x$就好啦。

    翘课

    10% $2le n,mle 500,k=1$

    20% $2le n,mle 200000,k=1$ 暴力

    40% $2le n,mle 2000,k=2$ 找环

    70% $2le n,mle 2000,k<n$ 每次跑点判断

    100% $2le n,mle 200000,1le k <n$ 倒着删

    考虑先把所有边加进去,再倒过来删边。

    对于每个点,我们考虑要不要删掉它,删掉它表示它连接着选中的点的度小于 K 了。删完它之后我们把它邻居的度都--,然后再看它的邻居要不要被删掉。这样预处理把每个点判一次要不要删。

    之后删一条边也是删完就判断连接的两个点需不需要被删掉。因为每个点只会被删一次,所以整体还是O(n)的。

    题目做法可能多样,但思路应该都是倒过来。

    运气大战

    20% $nle 10,qle 10$ 暴力

    另30% $nle 1000,qle 100$ 这个点我也不记得为什么放了,但看起来很多人只拿到了50所以可能还是有点意义的?

    另20% $nle 30000,qle 500$ nq 的 dp

    100% $2le nle 30000,1le qle 10000,1le w_i,r_i le 1e6,1le a_i ot=b_i le n$

    由于排序不等式,我们尽量想顺序放。两边都排序。

    由于 n 个不能配的干扰,又不能完全顺序放。

    有个结论,最后匹配出第 i 个人的运气值是第 j 个的话,$|i-j|le2$。这个结论从最小化逆序对的个数来看,自己把附近几个线连起来画一画证明一下。

    这样就可以用 dp[i]表示到 i 为止所有配好的最优答案。计算的时候需要用到前三轮的答案然后讨论一下。这个是 O(nq)的,可以过70%。

    用线段树记录区间答案。区间记录这样的信息:把这个区间前0-2个和后0-2个元素去掉的答案,用3x3的矩阵维护。这样复杂度是O(qlogn)。

  • 相关阅读:
    mysql_example
    windows 下 解决 go get 或 dep init 更新不了问题
    golang反射
    Windows下修改hosts并且让他立即生效
    Windows不重启就使环境变量修改生效
    swoole进程-2
    swoole进程
    swoole协程
    区间素数筛法
    AOJ
  • 原文地址:https://www.cnblogs.com/huihao/p/9900930.html
Copyright © 2011-2022 走看看