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

    「6.18」多校联训41

    种蘑菇

    直接求不好求,考虑枚举答案。
    (ans=sumlimits_{g=0}^{n}sumlimits_{s=0}^{frac{n}{g}}g^{s}F[g][s])
    ( ext{F[g][s]}) 表示 ( ext{gcd})( ext{g}) 且集合大小为 ( ext{s}) 的集合个数。
    涉及到 ( ext{gcd}),考虑莫比乌斯反演
    定义 ( ext{G[g][s]}) 表示 ( ext{gcd})( ext{g}) 的倍数且集合大小为 ( ext{s}) 的集合个数。
    (G[g][s]=sumlimits_{g|k}F[k][s])
    反演得
    (F[g][s]=sumlimits_{g|k}mu(frac{k}{g})G[k][s])
    代入原式
    (ans=sumlimits_{g=0}^{n}sumlimits_{s=0}^{frac{n}{g}}g^{s}sumlimits_{g|k}mu(frac{k}{g})G[k][s])
    单独的一个 G[k][s] 可以在所有提出k的倍数的点的各联通块中dp得到,但是dp一次复杂度是(mathcal{O}((frac{n}{k})^2))的。
    发现可以交换求和号
    (ans=sumlimits_{g=0}^{n}sumlimits_{g|k}mu(frac{k}{g})sumlimits_{s=0}^{frac{n}{g}}g^sG[k][s])
    现在 (sumlimits_{s=0}^{frac{n}{g}}g^sG[k][s]) 可以对于将所有k倍数的点提出来形成的若干联通块进行一次 (mathcal{O}(frac{n}{k})) 的dp求出来
    其实这个贡献就是每个点有权值g,一个联通块的权值为各个点权值之积,求这些点所有可能形成的联通块情况的权值和
    dp的时候在合并子树时考虑是否连上该子树, 初始dp[x]=g,合并子树时不断进行 (dp[x]=dp[x](dp[y]+1)),最终贡献为所有点的dp值之和。
    时间复杂度(mathcal{O}(nlog^2))

    轮回

    期望 ( ext{dp}) 一般是倒着转移的
    定义 ( ext{f[i][j]})表示现在在 ( ext{i}) (已经击打完了),偏离中心线距离为( ext{j}),从现在往后走的期望步数。
    转移 (f[i][j]=1+p[i]*f[i+1][j]+frac{1-p[i]}{2}*f[i+1][abs(j-1)]+frac{1-p[i]}{2}*f[i+1][j+1])
    并且 ( ext{f[1~n][j]}) 形成了环的形式,我们可以迭代,解方程组即可求出 ( ext{f})
    我们将 ( ext{f[i][0~k]}) 看作矩阵 (F_i),那么 (F_i=M_i*F_{i+1})
    对于 ( ext{n=3}) 的,可以列出
    (F_1=M_1*F_2)
    (F_2=M_2*F_3)
    (F_3=M_3*F_1)
    迭代得
    (F_1=M_1*M_2*M_3*F_1)
    (F_2=M_2*M_3*M_1*F_2)
    (F_3=M_3*M_1*M_2*F_3)

    (F_i=M_i*M_{i+1}...M_n*M_1*M_2...*M_{i-1}F_i)
    (M=M_i*M_{i+1}...M_n*M_1*M_2...*M_{i-1})
    得到 (F_i=M*F_i)
    将其展开就得到了一个 ( ext{k+1}) 个变量,( ext{k+1}) 个方程的方程组,是可以高斯消元解出 ( ext{f[i][0~k]}) 的,而从 ( ext{i}) 开始走的答案就是 ( ext{f[i][0]})
    然后发现 (M)(M_1*M_2...*M_n) 的一个后缀和一个前缀的乘积,可以用线段树维护矩阵乘法,查询区间乘积,单点修改。
    时间复杂度 (mathcal{O}(qk^3logn))

    首先删去 (y_1), (y_m) 以外的点和重复的点
    定义每个点有 ((x_i,y_i)),为其分别距离左右最近的洞的距离
    放到坐标系上,发现移动就可以看作每次可以向上移动x轴或向右移动y轴,每个点最先被哪个轴覆盖到就对应进哪边的洞。
    并且,如果一个点被x轴覆盖到,那么其右下方的点都会被x轴覆盖到
    所以每种终止状态可以看成选出一些点被x轴覆盖,且这些点是最紧限制的(在尽量靠左上方)(这些点之间没有决定或被决定的关系)
    发现可以选的这些点满足x,y互不相同,且x递增的情况下y严格递增
    所以此问题转化为求严格上升子序列(子序列中各点x,y互不相同)的方案数,树状数组优化dp,时间复杂度 (mathcal{O}(nlogn))

    「6.19」多校联训42

    区间第 k 小

    • 给定一个序列以及参数 (omega),强制在线,每次询问对于区间 ([l,r]),忽略出现次数大于 (omega) 的数求第 (k) 小。((n,q leq 1e5))
    • 如果可以离线,可以莫队+值域分块
    • 值域分快单次修改 (mathcal{O}(1)),单次询问 (mathcal{O}(sqrt{n})) ,维护两个数组 (tot)(c),记录当前扫到的数的信息,分别表示值域上在每个块内的数的总次数和每个数的出现次数,询问时先通过 (tot) 来判断答案在哪个块里,依次遍历块内数的桶即可。
    • 强制在线,考虑如何维护出 (tot)(c)
    • (tot) 可以预处理,首先对序列分块, (tot[i][j][k]) 维护第 (i) 个块到 (j) 个块的 (tot) 信息,询问 ([l,r]) 时零散的暴力改 (tot)
    • (c) 因为空间限制开不下类似 (tot) 的预处理数组。发现我们只需要知道一段区间某个数出现次数,因此我们处理 (c[i][j]) 表示序列前 (i) 个块中 (j) 的出现次数,询问 ([l,r]) 先差分,零散的数暴力改即可。

    求和

    莫比乌斯反演,杜教筛

    本题有 (2) 个性质:

    • 如果有路径 (a o b)(b o c),那么变成 (a o c) 修改量不变
    • 如果有路径 (a o b)(c o d),那么变成 (a o d)(c o b) 修改量不变

    通过性质一,发现点 (x) 的入度与出度可以抵消
    通过性质二,发现若得到起点集合与终点集合,那么起点与终点可以任意匹配,进而容易满足字典序最小的条件。
    对于叶子节点,容易得出其入度与出度,进而知道其作为起点还是终点。
    对于非叶子节点,在统计完叶子后删去叶子,即可同理处理新叶子。
    注意在处理叶子的度数时,其父亲的度数也应修改。

    「6.21」多校联训43

    小卖部

    容易发现对于询问 (l,r,c)( ext{OGF})(prodlimits_{i=l}^{r}(1+x^{b_i}+x^{2b_i}...+x^{a_ib_i}))
    答案即为前 ( ext{c}) 项的系数之和。
    注意 ((1+x^{b_i}+x^{2b_i}...+x^{a_ib_i})) 其封闭形式为 (frac{1-x^{(a_i+1)b_i}}{1-x^{b_i}})
    维护前缀积 ( ext{f}) 与求逆后的前缀积 ( ext{g})
    维护前缀积的时候用发散形式乘,逆的前缀积用封闭形式乘
    观察性质发现卷积拆开后容易 (mathcal{O}(c)) 乘一次

    博弈

    网络流

    「6.22」多校联训44

    战神归来

    发现相反且重合的 (2) 条路径,重合部分会被抵消掉,利用差分,求前缀和得到第一问答案。
    对于方案,不难得到一个时间复杂度 (mathcal{O}(n*(n+m))),最劣操作次数 (mathcal{O}(n^2)) 的做法,至此有 (72) 分。
    具体做法就是将向右的路径存在终点的 ( ext{vector}) 中,并记录现在时刻该路径起点位置,按照终点位置从右向左排序方向向左的路径。
    依次处理排序后的向左的路径,对于每条向左的路径,从右向左遍历 ( ext{m})个位置的 ( ext{vector}) 并匹配,同时修改 ( ext{vector}) 中被匹配的路径的起点位。
    正确性在于只要能匹配就匹配是不会使花费更劣的。
    正解用 (2) 个栈分别维护不同方向的路径,从左向右,类似扫描线,每条路径只在一段时间内在栈中,对于每个时刻,如果 (2) 个栈都有值就不断匹配或 ( ext{pop}) 不合法,而且发现匹配一次一定会至少减少一条路径(如果有一条后面还可以匹配,就将其以后再放进去),最后得到零散操作,建图跑拓扑序输出即可,时间复杂度 (mathcal{O}(nlogn)),瓶颈在建拓扑图时排序。

    组合数问题

    利用二项式定理展开二项式
    利用第二类斯特林数的性质展开通常幂
    通过改变枚举顺序,利用二项式定理合并,容易化简得到 (sumlimits_{j=0}^{n}j^mj!(-1)^j),可以 (mathcal{O}(nlogn)) 解决

    (sumlimits_{i=0}^{n}(-1)^isumlimits_{j=0}^{n}j^minom{j}{i}(m+i)^j)
    (=sumlimits_{j=0}^{n}j^msumlimits_{i=0}^{n}(-1)^iinom{j}{i}(m+i)^j)
    (=sumlimits_{j=0}^{n}j^msumlimits_{i=0}^{n}(-1)^iinom{j}{i}sumlimits_{k=0}^{j}inom{j}{k}m^{j-k}i^k)
    (=sumlimits_{j=0}^{n}j^msumlimits_{i=0}^{n}(-1)^iinom{j}{i}sumlimits_{k=0}^{j}inom{j}{k}m^{j-k}sumlimits_{l=0}^{k}inom{i}{l}l!egin{Bmatrix}k\lend{Bmatrix})
    (=sumlimits_{j=0}^{n}j^msumlimits_{k=0}^{j}inom{j}{k}m^{j-k}sumlimits_{k=0}^{k}l!egin{Bmatrix}k\lend{Bmatrix}sumlimits_{i=0}^{n}inom{j}{l}inom{j-l}{i-l}(-1)^i)
    (=sumlimits_{j=0}^{n}j^msumlimits_{k=0}^{j}inom{j}{k}m^{j-k}sumlimits_{k=0}^{k}l!egin{Bmatrix}k\lend{Bmatrix}inom{j}{l}sumlimits_{i=0}^{j-l}inom{j-l}{i}(-1)^{i+l})
    (=sumlimits_{j=0}^{n}j^msumlimits_{k=0}^{j}inom{j}{k}m^{j-k}sumlimits_{k=0}^{k}l!egin{Bmatrix}k\lend{Bmatrix}inom{j}{l}(-1)^lleft[j=l ight])
    (=sumlimits_{j=0}^{n}j^mj!(-1)^j)

    三角形

    发现合法三角形一定有 (2) 个端点为包围其的最小矩形 (2) 个对角顶点,若这 (2) 点都确定,第三个端点只有 (2) 个位置,且矩形应满足长宽互质。
    以上性质利用 ( ext{pick}) 定理及 ( ext{exgcd}) 的相邻解间隔不难得到。
    (sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}4(n-i)(m-j)[i perp j])
    (=sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}4(n-i)(m-j)sumlimits_{d|(i,j)}mu(d))
    (=4sumlimits_{d=1}^{n}mu(d)sumlimits_{i=1}^{frac{n}{d}}(n-id)sumlimits_{j=0}^{frac{m}{d}}(m-jd))
    (=4sumlimits_{d=1}^{n}mu(d)frac{n}{d}frac{m}{d}-4sumlimits_{d=1}^{n}mu(d)d(m·frac{m}{d}sumlimits_{i=1}^{frac{n}{d}}i+n·frac{n}{d}sumlimits_{i=1}^{frac{m}{d}}i)+4sumlimits_{d=1}^{n}mu(d)d^{2}sumlimits_{i=1}^{frac{n}{d}}isumlimits_{j=1}^{frac{m}{d}}j)
    (mu(d))(mu(d)·d)(mu(d)·d^2)前缀和用杜教筛解决,时间复杂度 (mathcal{O}(n^{frac{2}{3}}))

  • 相关阅读:
    中国石油昆仑加油卡
    157 01 Android 零基础入门 03 Java常用工具类01 Java异常 01 异常介绍 02 异常内容简介
    156 01 Android 零基础入门 03 Java常用工具类01 Java异常 01 异常介绍 01 Java常用工具类简介
    155 01 Android 零基础入门 02 Java面向对象 07 Java多态 07 多态知识总结 01 多态总结
    154 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 05 匿名内部类
    153 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 04 方法内部类
    152 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 03 静态内部类
    151 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类 02 成员内部类
    150 01 Android 零基础入门 02 Java面向对象 07 Java多态 06 内部类概述 01 内部类概述
    149 01 Android 零基础入门 02 Java面向对象 07 Java多态 05 接口(重点)07 接口的继承
  • 原文地址:https://www.cnblogs.com/Lour688/p/14901324.html
Copyright © 2011-2022 走看看