zoukankan      html  css  js  c++  java
  • 2021.10 好题

    https://www.luogu.com.cn/training/2018

    Avoid Rainbow Cycles

    https://www.luogu.com.cn/problem/CF1408E

    用最小代价删除 ( o) 用最大代价保留

    我们布置一张新的星图,有 (n) 个流星,代表着 (n) 个集合。如果元素 (x) 出现在 (i) 号集合,那么将 (x) 号星辰和 (i) 号流星相连价值为 (x+b_i) 的无向丝线。

    此时此刻,仰望星空,发现如果崭新星图亦有天体之环,那么旧图也将对应有环。所以让我们精简星图,细剪连线,求出最大生成树,即可。

    Xor Tree

    https://www.luogu.com.cn/problem/CF1446C

    整活题解

    那是代代相传的处事真言:“如果不能铲除更多不如意,不如去保留更多的幸福。”

    将每个数字代表的点化作星斗,那么仰望星空,星图上最多会有 (n) 条轻灵丝线。而我们需要遮蔽掉尽量少的星斗,也就是让尽量多的星斗照耀,使得有且仅有一对星斗——牛郎织女星 ((i,j)),互相都有 (a_i ext{xor} a_j) 为它们的最小值。依此法做,(i) 会指向 (j),且 (j) 会指向 (i),双向奔赴,丝线重合,星图上只有 (n-1) 条丝线,我们仰头探望,便是树状星辰。

    想到 ( ext{xor}),思想的平原上便生长出一棵茂盛多枝的字典树,而神妙的肥料就是我们插入的星斗数值 (a_i)。我们在字典树的 (x) 号点上刻上数字 (f_x),代表探索到 (x) 号点的瞬间,我们最优还能保留多少星斗,使多少星斗照耀。

    那么,刻画的数字 (f_x) 满足以下规律:如果 (f_x) 没有左向的枝丫,那么 (f_x) 就是右向的枝丫刻画的数字;如果 (f_x) 没有右向的枝丫,那么 (f_x) 就是左向的枝丫刻画的数字。

    尽管如此,如果 (x) 既有左向的枝丫,又有右向的枝丫,那么该如何是好?不要慌张,不要大意,我们仅需令 (f_x) 等于左向的枝丫刻画的数字与右向的枝丫刻画的数字的极大之值,再加上恒本之 “(1)” 即可。原因如下,如果左向枝丫、右向枝丫各只对应一个星斗数值,分别为 (a_i,a_j) 那么这一对 ((i,j)) 满足条件。否则,例如左向枝丫刻画之树稍大,那么我们可以保留全部的左向枝丫对应的星辰,再选一个右边的星斗。设 (x) 的深度为 (dep_x),由于它们在二进制下从高向低第 (dep_x+1) 位不同,所以右边的星斗必不会与左边的星斗满足条件(左边的星斗互相连显然更优)。因此,当这棵字典树上数字刻尽,再向上望去,必将也是一棵大树——满足题设的、长在星辰大海中的苍天之树。而擦拭汗水后,用 (n) 减去字典树根节点的刻画的数字(因为求的是最少遮蔽多少星辰,便是 (n-f_{ ext{root}})),便是我们将大声呼喊出的,世间的最终真理。

    正经题解

    ! 删除最少 = 保留最多。

    要使有且仅有一对 ((i,j)),使得 (a_i ext{ xor } a_j) 是互相的最小值,这样它们的边就会重复。建立字典树,设 (f_x) 为处理到字典树点 (x) 的时候最多可以保留多少个数字。

    [f_x=f_{lson} , ext{ if no rson}\ f_x=f_{rson} , ext{ if no lson}\ f_x=max(f_{lson},f_{rson})+1, ext{ otherwise} ]

    最后一个转移方程的意思是,如果左儿子 (f) 更大,那么就保留左儿子。右儿子不可以选两个以上,因为这样就不止一对合法的 ((i,j))(左儿子中有,右儿子也有)。但是右儿子可以选一个,因为右儿子与左儿子的任意一个的 (x_{dep}+1) 位不同,肯定不会是互相的最小值(左儿子间的 (x_{dep}+1) 位是 0)。右儿子 (f) 更大,同理。

    Happy New Year

    https://www.luogu.com.cn/problem/CF1313D

    ! 发现 (kle 8)。对于很小的数据,题解,居然,想到,状压

    采用扫描线的思路,将区间们化作很多个端点们。设 (f_{i,S}) 为在第 (i) 个端点,包含这个端点的 (k) 个区间是否选择的状态,然后 dp 即可。到时候打代码的时候具体想想转移方程。

    Divide Square

    https://www.luogu.com.cn/problem/CF1401E

    发现答案贡献来自两个:

    1. 直接将矩形劈成两半的线段数量 (A)
    2. 线段间交点数量 (B)。(每多一个交点,就会多一个矩形)

    (ans=A+B+1)

    重点在于计算 (B)。将横向线段当做修改,纵向线段当做查询,树状数组即可。

    Edge Weight Assignment

    https://www.luogu.com.cn/problem/CF1338B

    构造题,从点到根的所有边入手。

    Two Different

    https://www.luogu.com.cn/problem/CF1408F

    手操发现,答案似乎是:第一次 2 的倍数,第二次 4 的倍数……

    题解上说递归 ((1,n)) 分为 ((1,k),(k+1,n)) 操作即可,其中 (log kin mathbb Z)

    Stoned Game

    https://www.luogu.com.cn/problem/CF1396B

    我考虑到,如果有一堆比其它所有堆之和还要多,那么先手必赢。

    然后就不会了2333。

    题解是这样说的,如果没有上面的情况,那么两人轮流走,采取最优策略,是不会使得上面的情况发生的。模拟一下可知,如果一堆很多了,那么肯定会去取这一堆,保障没有让对手必赢的情况。于是最后肯定会把石头全部取完,判断总石子奇偶性。

    Chess Strikes Back

    https://www.luogu.com.cn/problem/CF1379F1

    https://www.luogu.com.cn/problem/CF1379F2

    (2n imes 2m)(n imes m)

    ! 于是我们把棋盘划分为许多个 (2 imes 2) 的小矩阵。这些小矩阵必定是左上角和右下角白色。将矩阵分为四类:

    1. 两块都没有被挖掉。
    2. 两块都有被挖掉。
    3. 左上被挖,右下保留。
    4. 右下被挖,左上保留。

    如果小矩阵 3 的右下方有小矩阵 4(准确来说,如果小矩阵 3 坐标 ((a,b)),小矩阵 4 坐标 ((x,y)),那么 (age x and bge y)),那么就不合法了。

    用线段树维护 3 的最左位置和 4 的最右位置即可。

    Web of Lies

    https://www.luogu.com.cn/problem/CF1548A

    注意到,如果有一个点 (A),有比它大的点 (B) 与它相连,那么 (A) 一定会被删。因为此连通块大小大于等于 2,所以它会被删(感性递归一下吧233)。所以,如果有一个原本是孤立的点,连上了一个比它大的点,答案减少一。同样道理,如果有一个点删除边后变成一个孤立的点,答案增加一

    Staircases

    https://www.luogu.com.cn/problem/CF1598E

    这道题充分展示了我的水分

    (f_{x,y,1/2}) 为以 ((x,y)) 开始的,结构为 (1/2) 的楼梯的数量。

    Weights

    https://www.luogu.com.cn/problem/CF1599A

    ! 正推不行就逆推!懂?

    我们将砝码由重到轻排序,如果最后一位是 L,那么把第 1 3 5 7…… 个砝码放到左边,其它放到右边,是最优的。最后一位是 R 同理。

    于是我们从第 (i) 个状态转移到第 (i-1) 个状态只需要删除一个砝码。

    然后有一个神仙推论:删除最轻的砝码,不会改变当前天平的方向;删除最重的砝码,必会改变当前天平的方向。

    ! 从最大最小值入手。

  • 相关阅读:
    在MPTCP中引入流量监控——bwm-ng的使用说明
    Ubuntu下配置MPTCP
    实现两台MPTCP主机之间的通信——VSFTPD的配置与使用
    Google 辟谣,Android 和 Chrome OS 不合并
    paper-7
    计算机网络方面国际三大顶尖会议
    谷歌物联网操作系统Android Things揭开面纱
    张纯如
    Android binder机制之 5 --(创建binder服务)
    【BZOJ 1491】[NOI2007]社交网络
  • 原文地址:https://www.cnblogs.com/BlankAo/p/15473014.html
Copyright © 2011-2022 走看看