• Codeforces试题乱做 Part9


    他挥毫泼墨落笔

    她舞袖梦里佳期

    戏中情 戏中意

    陌路人相逢

    在花天锦地


    \(\text{[CF1736E]Swap and Take}\)

    \(\color{green}{\text{[EASY]}}\)

    我们考虑最终最优的答案中每个位置所加上的值在原序列中的位置, 记其为 \(p_i\) , 显然的是 \(p_1\leqslant p_2 \leqslant \dots\leqslant p_n\) , 答案即为 \(\sum\limits_{i=1}^{n}{a_{p_i}}\) .

    注意到 \(n\) 很小, 考虑高次方 \(dp\) 求解这个问题, 设 \(f_{i,lst,k}\) 表示在第 \(i\) 轮, \(p_i=lst\) , 总共进行了 \(k\) 交换的最大得分.

    转移分别考虑 \(p_{i}=p_{i-1}\)\(p_{i}>p_{i-1}\) , 前者 \(f_{i,lst,k}=f_{i-1,lst,m-1}+a_{lst}\) , 后者 \(f_{i,lst,k}=\max\limits_{j=1}^{lst-1}\{f_{i-1,j,k-(lst-i)}\}+a_{lst}\) .

    后面的转移可以预处理前缀最大值, 时间复杂度 \(\mathcal{O}(n^3)\) .


    \(\text{[GYM102268B]Best Subsequence}\)

    \(\color{green}{\text{[EASY]}}\)

    最大值最小明显要二分答案, 那么相邻两个元素和不能超过 \(mid\) , 我们取出所有 \(a_i\leqslant \lfloor\frac{mid}{2}\rfloor\) , 组成一个新的序列, 两个数之间能且只能插入一个大于 \(\lfloor\frac{mid}{2}\rfloor\) 的数, \(check\) 一下长度即可.

    时间复杂度 \(\mathcal{O}(n\log{n})\) .


    \(\text{[CF1753C]Wish I Knew How to Sort}\)

    \(\color{blue}{\text{[NORMAL]}}\)

    很难绷得住为什么这种做法这么多人会.

    没有什么想法, 先考虑想最优化问题来观察性质, 最优的会是最左边的 \(1\) 去换最右边的 \(0\) , 虽然这并没有什么鬼用, 但是我们发现, 有一些 \(1\)\(0\) 是交换是对最优方案做负贡献的, 进一步的, 我们发现, 令全局有 \(a\)\(0\) , 那么, 只有移动前 \(a\) 个里面的 \(1\) 和后面 \(n-a\)\(1\) 里面的 \(0\) , 才有用, 而移动这两边内部的 \(1\)\(0\) 改变前 \(a\) 个里面 \(1\) 的个数, 换句话说即使交换了内部的 \(1\)\(0\) 之后, 对最优策略的交换次数没用作用.

    这启发我们只关注前面 \(a\) 个中 \(1\) 的个数, 进一步的, 容易发现前 \(a\) 个中的 \(1\) 是独立的, 所以我们可以由此来得到答案的式子, 前面还有 \(i\)\(1\) 时, 取有效操作的概率为 \(\dfrac{i^2}{\binom{n}{2}}\) , 期望即为 \(\dfrac{\binom{n}{2}}{i^2}\) , 故答案即为 \(\sum\limits_{i=1}^{a}{\dfrac{\binom{n}{2}}{i^2}}\) , 不计求逆元时间复杂度为 \(\mathcal{O}(n)\) .


    \(\text{[CF516E]Drazil and His Happy Friends}\)

    \(\color{blue}{\text{[NORMAL]}}\)

    首先令 \(d=\gcd\{n,m\}\) , 不难知道在 \(\bmod{d}\) 意义下同余的才会在一起玩, 所以分为 \(d\) 个剩余类, 每个剩余类只要有一个人是快乐的其他人都会变快乐. 简单证明一下, 令 \(n=n_1d,m = m_1d\) , 有 \(\begin{cases}x\equiv ad+y \pmod{n_1}\\x\equiv bd+y\pmod{m_1}\end{cases}\) 中国剩余定理保证一定有解. 所以我们只需要求出每个子问题的解, 然后取 \(\max\) 即可.

    特别的, 如果 \(d > g+b\) 是无解, 所以只用考虑 \(d\leqslant 2\times 10^5\) , 现在我们只需要考虑 \(\gcd\{n,m\}=1\) 的情况.

    假设最后一个变快乐的女士是 \(i\) 号, 她在第 \(x\) 天变快乐的, 那么有 \(x\bmod{m}=i\) , 假设是因为第 \(j\) 号男生而变快乐的, 那么 \(x\bmod{n}=j\) , 那么就要考虑 \(j\) 号男生啥时候变快乐, 如果 \(j\) 号男生一开始就是快乐的, 那么显然他会在第 \(j\) 天让 \(j\bmod{m}\) 号女生变快乐.

    \(c=\frac{x-j}{n}\) , 也就是他让 \(i\) 号女生变快乐经过的轮数, 则我们考虑在第 \(j+n\) 天, 这个男生会让 \((j+n)\bmod{m}\) 号女生变快乐.

    形式化的说如果 \(k\) 号女生变快乐了, 那么在 \(n\) 天之后, \((k+n)\bmod{m}\) 号女生一定变快乐.

    也就是说, 标号为 \(k\) 的女生向标号为 \((k+n)\bmod{m}\) 的女生连一条长度为 \(n\) 的边. 对于一个初始快乐男生 \(j\) , 从源点向 \(j\bmod{m}\) 号女生连一个长度为 \(j\) 的边.

    对于一个初始快乐的女生 \(i\) , 从源点向 \(i\) 连长度为 \(i\) 的边, 这样从源点开始跑最短路, 所有点的 \(\max\) 就是答案.

    但是点数是 \(10^9\) 级别的, 没法跑最短路, 观察到这个图的一个性质, 因为 \(n,m\) 互质, 所以第一种连边一定是连乘一个环, 认为源点直接连向的点为关键点, 我们考虑关键点在环上排序, 那么答案一定是两个相邻的关键点的前一段.

    所以现在的问题是如何给关键点排序, 可以使用 \(exgcd\) , 相当于给每个点重标号, 变为 \(0,n,2n,\dots\) , 用 \(exgcd\) 求出对应系数即可.

    时间复杂度 \(\mathcal{O}((b+g)\log{(b+g)})\) .


    \(\text{[CF521D]Shop}\)

    \(\color{green}{\text{[EASY]}}\)

    首先, 只有乘法是好做的, 从大到小排个序就好了, 当然我们也知道赋值可以转变为加法, 那么, 进一步的我们会想, 加法是否能转变为乘法, 因为它要我们最大化全局积, 对于一个乘法的贡献是好描述的, 但加法的不好描述.

    对于一个数, 原本它的值为 \(x\) , 加了一个数之后它变成了 \(y\) , 那也就相当于给它乘上一个 \(\frac{y}{x}\) , 那这就好办了.

    不难发现, 最优决策一定是先赋值再加法再乘法, 对于同一个数加法一定是从大到小加, 那变成乘法之后排序它还会是从大到小吗, 这是显然的, 如果有 \(a > b\) , 那么也有 \(\frac{x+a}{x}>\frac{x+b}{x}\) .

    时间复杂度 \(\mathcal{O}(n\log{n})\) .


    \(\text{[CF521E]Cycling City}\)

    \(\color{green}{\text{[EASY]}}\)

    我觉得这些转化还是很巧妙的, 配得上 \(3100\) .

    存在两个点之前有三条不相交的路径等价于存在两个环有边相交, 又等价于一棵生成树, 有一条树边同时被两条非树边覆盖.

    树上差分可以判断可行性但无法给出构造, 考虑一个暴力的做法, 暴力枚举每条非树边, 只要有一条树边的覆盖次数达到 \(2\) 就输出, 因此记录一下被哪条非树边覆盖的就行了, 不难得出构造方案.

    时间复杂度 \(\mathcal{O}(n+m)\) .


    \(\text{[CF526G]Spiders Evil Plan}\)

    \(\color{blue}{\text{[NORMAL]}}\)

    首先, 我们选的路径一定是叶子到叶子, 那么 \(2k\) 个叶子最优能覆盖到的不过是它们所构成的虚树, 简单证明使用 \(k\) 条路径就能覆盖一棵有 \(2k\) 个叶子的树.

    先以任意方式匹配叶子, 如果有两条路径不交, 那么一定可以调整成相交的情况, 不断调整就可以覆盖整棵树, 这个证明没有说明调整能在有限步内完成, 不过这对于本题没什么用.

    所以一个询问就是, 以 \(x\) 为根, 选 \(2y\) 个叶子, 首先如果一定要包含 \(x\) , 那么选的叶子构成的虚树等价于选的叶子到根的链构成的虚树, 注意到, 如果子树 \(x\) 中有叶子被选了, 那么 \(x\) 所在长链也一定被选了, 那么实际上问题就是选前 \(2y\) 条长链.

    这样的选择一定会选到树的直径的某一端, 那分别以两个直径的端点为根分别做一次就好了, 注意此时是选 \(2y-1\) 个叶子.

    但是仍存在一个问题, 选出的连通块不包含 \(x\) , 这时候就得做一些调整, 首先最容易想到的是, 删除选到的最短的长链, 并选上 \(x\) 所以在的长链, 但这并不完全对, 也可以是距离 \(x\) 最近的长链, 将其下半部分替换成 \(x\) 所在的长链, 两者选大即可.

    倍增跳长链, 时间复杂度 \(\mathcal{O}((n+q)\log{n})\) .


    \(\text{[CF527E]Data Center Drama}\)

    \(\color{green}{\text{[EASY]}}\)

    首先充要条件是每个点出度入度都是偶数, 并且总边数为偶数, 那么增加最少的边就是奇数点两两相连, 加上一个自环.

    构造即为欧拉回路, 回路上第奇数条边取原方向, 偶数条取反方向即可, 这样保证经过一个点要么入度 \(+2\) 要么出度 \(+2\) .

    时间复杂度 \(\mathcal{O}(n)\) .


    \(\text{[CF536D]Tavas in Kansas}\)

    \(\color{blue}{\text{[NORMAL]}}\)

    博弈题当你想不出策略的时候, 果断选择 \(dp\) . 预处理 \(s,t\) 到每个点的最短路并离散化, 设 \(f_{X,Y,p}\) 表示当前剩下所有到 \(s\) 距离不小于 \(X\) , 且到 \(t\) 距离不小于 \(Y\) 的点, 先手的人是 \(p\) , 所能获得的最大得分. 设 \(cnt_{X,Y}\) 表示到 \(s\) 距离不小于 \(X\) 且到 \(t\) 距离不小于 \(Y\) 的点数, \(sum_{X,Y}\) 为它们的权值和, 有

    \[f_{X,Y,p}=\begin{cases} 0&,cnt_{X,Y}=0,\\ \max\limits_{cnt_{X',Y}<cnt_{X,Y}}\{sum_{X,Y}-f_{X',Y,1}\}&,p=0,\\ \max\limits_{cnt_{X,Y'}<cnt_{X,Y}}\{sum_{X,Y}-f_{X,Y',0}\}&otherwise. \end{cases} \]

    记录最小于次小值可以做到 \(\mathcal{O}(n^2)\) .


    \(\text{[CF538G]Berserk Robot}\)

    \(\color{red}{\text{[HARD]}}\)

    这题怎么这么牛逼.

    注意到原题走一步的操作关乎到两维, 那么把坐标系逆时针旋转 \(45^{\circ}\) , 并且同时扩大 \(\sqrt{2}\) 倍, 发现每次操作后横纵坐标只会同时发生大小为 \(1\) 的改变, 故二者独立, 分别求解.

    \(S_i\) 表示 \(i\) 次操作后的前缀和, 假设已知 \(t_i\) 时刻坐标为 \(b_i\) , 令 \(a_i=\frac{t_i}{n},x_i=t_i\bmod{n}\) , 显然有 \(b_i=a_iS_n+S_{x_i}\) , \(S_i=-a_iS_n+b_i\) .

    那么我们得到若干三元组 \((x_i,a_i,b_i)\) , 按 \(x_i\) 排序, 问题变成构造一个合法序列 \(S\) , 满足 \(\forall i\in[1,n],|S_i-S_{i-1}|=1\) , 那么其实确定 \(S_n\) 即可知道全部.

    考虑如何求出 \(S_n\) , 有

    \[|S_{x_{i-1}}-S_{x_i}|\leqslant |x_{i-1}-x_i|\\ |(a_i-a_{i-1})S_n+(b_{i-1}-b_i)| \leqslant x_i-x_{i-1}\\ x_{i-1}-x_i \leqslant (a_i-a_{i-1})S_n+(b_{i-1}-b_i) \leqslant x_i-x_{i-1}\\ x_{i-1}-x_i-(b_{i-1}-b_i) \leqslant (a_i-a_{i-1})S_n \leqslant x_i-x_{i-1}-(b_{i-1}-b_i) \]

    根据 \(a_i-a_{i-1}\) 的正负性最后除掉即可得到 \(S_n\) 的取值范围的区间, 取交即可.

    最后只需要构造序列了, 对于两个相邻的三元组, 设它们之间有 \(a\)\(1\) , 所以 \(a-(x_i-x_{i-1}-a)=S_{x_i}-S_{x_{i-1}}\) , \(a=\frac{S_{x_i}-S_{x_{i-1}}+x_i-x_{i-1}}{2}\) .

    直接把前 \(a\) 个位置填 \(1\) 后面的填 \(-1\) 即可, 但是 \(a\) 显然不能是分数, 虽然理论上 \(S_n\) 可以任意取, 但他也切切实实影响此处的奇偶性, 所以把最小值 \(l\)\(l+1\) 都试一遍即可.

    时间复杂度 \(\mathcal{O}(n\log{n})\) .


    她唱着 他乡遇故知

    一步一句是相思

    台下人 金榜正题名

    不曾认 台上旧相识

    他说着 洞房花烛时

    众人贺 佳人配才子

    未听 一句一叹戏里有情痴

  • 相关阅读:
    《一线架构师实践指南》第三编Refined Architecture阶段读后感
    大数据技术与应用课堂测试2-数据初级分析分类2
    大数据技术与应用课堂测试2-数据初级分析分类
    对Datax的理解
    2020春季学期第三周总结
    可测试性战术总结
    2020春季学期第一周总结
    以《淘宝网》为例,描述质量属性的六个常见属性场景
    软件架构师如何工作
    MapReduce+HIVE 课堂练习
  • 原文地址:https://www.cnblogs.com/Lonely923/p/16870235.html
Copyright © 2020-2023  润新知