• 20211115 NOIP模拟赛 6


    今天的题都好好啊。

    A. 【2020.12.2 NOIP模拟赛 T1】最小得分和(mark)

    观察到 \(1 \leq k \leq 5 \times 10^{11}\),这就算把数对们一对一对的找出来然后\(ans++\) 都会 T 啊=-=

    我们考虑二分,二分所选数对中差的绝对值最大是多少。

    假设当前二分值为 \(mid\),我们把差的绝对值小于等于 \(mid\) 的数对数量统计出来,与 \(k\) 比较并继续二分。

    如何统计数对数量呢?

    可以排序应该不难看出吧,然后单调队列跑一遍就完了。

    有了思路就很好写了吧,算出数对最大差值之后再跑一遍单调队列计算答案。

    emm……用 \(sum\) 记录当前队列中元素的和,\(cnt\) 为队列中元素个数,然后进来一个 \(a_i\)\(ans += a_i * cnt- sum\)

    B. 【2020.12.2 NOIP模拟赛 T2】礼物(gift)

    开题之后什么 dfs,bfs 一大堆都写了一遍,结果发现都不行……

    观察到 \(C \leq 16\),明显的状压,套路的状态 \(dp_{s, i}\) 表示选择状态为 \(s\) 的礼物,且最后一个礼物选 \(i\) 的情况下最少的时间。

    转移也很显然:

    \[dp_{s, i} = min\{ dp_{s \land |i|, j} + dist(g_j, g_i) \times count(s)\} \]

    • \(dist(g_j, g_i)\):礼物 \(j\) 到 礼物 \(i\) 的距离。
    • \(count(s)\):状态 \(s\) 中 1 的个数。

    可以先对于每个礼物 bfs 一遍,预处理出来 \(dist()\)

    转移的过程:先从 \(King\) 出发,计算到每一个礼物的 \(dp\) 值,然后统计答案时,从每一个礼物到 \(Queen\) 判断是否合法。

    注意:每走一格花费的时间是已选的礼物数 \(x + 1\),千万不要忘了 +1 啊啊啊啊啊啊,不然 100pts -> 55pts

    C. 【2020.12.2 NOIP模拟赛 T3】动物游戏(game)

    考场上看完之后直接弃了……

    对于一个点 \(x\),它的任意祖先为 \(k\),如果有 \(y\),使得 \(k\) 是点 \(x\)\(y\) 的公共祖先,那 \(x\) 能拿到 \(k\) 上的坚果的概率为:

    • \(dep_y < dep_x\) ,那么如果 \(y\) 要上场,\(x\) 就拿不到,所以 \(P = (1 - a_i)\)
    • \(dep_x \geq dep_y\)\(x\) 一定能拿到坚果。

    所以点 \(k\) 上的坚果能被拿到的概率就是比 \(x\) 点深度小的点且 和 \(x\) 拥有相同祖先 \(k\) 的所有点 \(y\) 的出场概率的乘积,然后对于每个 \(k\) 求个和就是答案。

    要按深度从小到达依次处理。

    那么 树剖 + 线段树 维护一下区间和区间乘即可。

    注意:每次都要先计算出当前层答案再更新。

    D. 【2020.12.2 NOIP模拟赛 T4】药香(medicine)

    树上有依赖背包的板子,然鹅考场时没时间写了,\(O(n^3)\) 暴力能拿 75pts。

    就是 dfs 序优化一下,就变成了普通的 01 背包,\(O(n^2)\) 即可处理出答案。

  • 相关阅读:
    谈谈对MapTask任务分配和Shuffle的理解
    Yarn的资源调优
    @section Scripts{}的使用
    数据提高查询速度的方法(摘抄)
    customErrors 元素(ASP.NET 设置架构)
    成员资格、授权和安全性(一)
    MVC5发展历程,从MVC2谈起
    轻量级记事本工具:CintaNotes
    CF459E Pashmak and Graph [dp]
    【模板】拉格朗日插值
  • 原文地址:https://www.cnblogs.com/xixike/p/15557671.html
Copyright © 2020-2023  润新知