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

    A. 小A的树

    超级钢琴、异或粽子、异或之几道题都是这个套路。

    对于每个右端点不断找区间最优解,然后把原区间分割为两个区间。

    用一个堆来时刻找到最大值。

    所以这个题要解决的就是一个点和区间内所有点的最大距离。

    点集合并的问题,直接搞一个线段树维护直径就好了。

    B. 小B的序列

    考虑位运算的一些性质,可以按位考虑。

    对于每一位而言,如果区间不同,执行 $or 1$ 或者 $and 0$ 操作之后,会使整个区间相同。

    所以说这个操作实际上意味着区间推平。

    当线段树区间内存在一个位满足当前不平,并且可以被该操作推平,那么就暴力递归下去。

    是否存在的判断可以直接通过维护区间的 $or$ 和 $and$ 然后用位运算实现。

    否则直接打一个标记来表示给区间整体执行 $or$ 和 $and$ 的操作。

    对二进制下的每一位势能分析一下,可以得知复杂度是两个 $log$ 的。

    所以问题是咋维护两个标记,来表示给区间执行 $or$ 和 $and$ 操作。

    可以钦定一个顺序,对区间内操作执行先 $and$ 后 $or$。

    那么$a and b or c or d =a and b or (c or d)$

    $a and b or c and d = a and (b and d) or (c and d)$

    然后再维护一下最大值支持查询就好了。

    C. 小C的利是

    首先要想到原问题可以用行列式来解决。

    因为行列式的定义就是枚举一个排列,然后贡献为权值的乘积 $*(-1)^{num}$。

    因为有个加法,所以把它提到指数上去,构造一个多项式就好了。

    因为有个 $(-1)^{num}$ 的系数,为了防止被卡需要再给每个多项式随机乘个系数。

    发现最终的答案显然不超过 $nk$ 次,所以暴力求值插值,复杂度大概是五次方级别的。

    然后发现我们只关注 $k$ 的倍数次方处是否有值,也差不多可以转化为 $k$ 的倍数次方的系数和。

    所以可以套个单位根反演上去。

    这样的话只要找出一个存在 $k$ 次单位根的质数来,然后在这个模质数意义下分别代入 $x=w_k^i$ $0 leq i < k$ 来求行列式的和。

    最终得到的答案就是 $k$ 的倍数次方的系数和。

    如果说这个值不为 $0$ ,即一定存在一组合法解,否则大概率无解。

  • 相关阅读:
    网络流模型之二分图匹配问题
    省选测试8
    省选测试9
    省选测试7
    省选测试6
    网络流最大流、最小割学习笔记
    kruskal重构树学习笔记
    省选测试5
    Python 打包成exe 方式
    JQuery
  • 原文地址:https://www.cnblogs.com/skyh/p/12533267.html
Copyright © 2011-2022 走看看