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

    A. 要换换名字

    显然二分一个答案,然后问题转化为二分图中是否存在一组完美匹配。

    然后发现,如果一个字符串的子序列个数超过 $n$ ,那么就没有必要接着连边了。

    所以对每个字符串建出不超过 $n$ 条边,然后跑个网络流就完事了。

    B. 动态半平面交

    因为太菜了,所以只会用一些套路来做这个题。

    容易发现 $lcm$ 就是对每个质因子给指数取 $max$。

    所以考虑以深度为下标,维护一个单调栈。

    然后对这个单调栈进行差分操作表示每次的变化量。

    然后这个问题在树上的复杂度不正确,所以搞个 dsu 就完事了。

    然后发现现在单调栈并不是在尾部插入了,所以需要搞个 set 来维护这个单调栈。

    把线段树持久化一下,就可以在线回答询问了。

    正解的思路是这样的。

    考虑把 $p^k$ 这个玩意转化为 $k$ 个物品,其中每个物品的权值都是 $p$。

    然后现在的问题就是给定 $u,d$ ,问 $u$ 子树中距离不超过 $d$ 的物品的权值乘积。

    这个东西直接用 set 维护一下链并就行了。

    常规的思路都是从子树到父亲的转移,然后就需要限制 $d$ 这个东西就很麻烦。

    然后这里的做法是按照深度从小到大转移,然后使线段树的下标为 $dfs$ 序,这样的话直接查询最大的深度所在的线段树就完事了。

    C. 获取名额

    显然答案是 $1-prod limits_{i=l}^r 1-frac{a_i}{x}$。

    为了避免高精度,首先给每个 $a_i$ 和每个 $x$ 都除掉一个 $max(a_i)$。 

    考虑给后面的连乘套上一个取$ln$,然后就转化为了简单的求和的形式。

    但是仍然是与 $x$ 有关的形式,没办法直接搞。

    所以整个泰勒展开,维护 $x^k (k leq 30)$的系数,然后计算就可以了。

    然后发现这个取 $ln$ 操作在 $a_i$ 特别大的时候,就会导致 $ln(1-frac{a_i}{x})$ 这个数的绝对值很大,然后精度就没了。

    但是容易发现这样的数不会很多,因为精度只要求到 $10^{-6}$,如果这样的数很多就可以直接跳出了。

    考虑定义一个阈值为 $0.5*x$ ,如果 $a_i>0.5*x$ ,就暴力计算这样的数,否则直接用泰勒展开。

    因为是静态的,所以整个 ST 表出来,然后直接按照最值分治就好了,如果当前的数精度已经够了,就直接跳出分治。

    然后发现因为每次找最值的精度都翻倍,复杂度显然是不超过两个 $log$ 的。

  • 相关阅读:
    web架构
    网站开发的学习交流 系统架构 负载均衡
    数据库连接
    OpenCV4【12】边缘检测
    python基础_格式化输出(%用法和format用法)
    Python之telnetlib模块
    根据文字或图片来生成用于Banner输出的字符画
    Python3 range() 函数用法
    Python psutil cpu_percent调用说明
    @staticmethod和@classmethod的用法
  • 原文地址:https://www.cnblogs.com/skyh/p/12451798.html
Copyright © 2011-2022 走看看