CF 绿蓝题做题记录

CF 绿蓝题做题记录

题单

最近有在经常随机一些 CF 绿蓝难度的题目,用于提升思维。这里专门开个坑,记录一下思路障碍经验什么的。

自然这些内容也在每天本来的做题记录中就有记录,只不过这里只是把它集合在一起罢了。


CF1438D Powerful Ksenia - 洛谷(同步于 2022.6.14 每日做题记录)

CF 的题似乎总是要善于猜结论。

  1. 思路分析:

    首先考虑一次操作可以做什么:

    1. 将任意三个不同的数变成相等的一个数;

    2. 如果三个数中有两个相等,那么相当于把前两个相等的数变成与第三个数相等的数。

    分类讨论。

    • \(n\) 为奇数时,一定可以构造出一组解:

      对于序列里除了一个数 \(a_p\) 之外,其它剩下的所有数均能两两配对,使得原序列变成:\((a,a,b,b,c,c,\cdots,k,k,a_p)\)。那么将 \(a_p\) 分别于前面的每一对相等的数匹配,就可以得到新的全为 \(a_p\) 的序列。

      操作次数 \(n-2\) 次。

    • \(n\) 为偶数时,如果是有解的,且数列长度为偶数,那么最后整个数列的异或和一定为 0。

      在有解情况下,可以先把前 \(n-1\) 个数用奇数的方法求解。

      由于异或和为 0,所以最后一个数一定也与前面的数相等。

      操作次数 \(n-3\) 次。

  2. 障碍:

    完全没有想到分类讨论,所以通过这道题积累了一个经验,遇到这种无从下手的题可以从 \(n\) 的奇偶角度分类讨论,也可以从 \(n\) 比较小的情况讨论找规律。


CF1133F1 Spanning Tree with Maximum Degree - 洛谷(同步于 2022.6.15 每日做题记录)

  1. 题意叙述:

    给出了一个由 \(n\) 个顶点和 \(m\) 条边组成的无向无权连通图。它保证在给定的图中没有自环或重边。

    需要找到这个图的一棵生成树,使得树上顶点的最大度数尽可能地大。

    输出构造方案。

  2. 障碍:

    • 走到了一个误区中,刚开始一直想通过二分解决。主要是因为题目中:

      使得树上顶点的最大度数尽可能地大。

      看起来非常像二分对应题目特征的“最大值最小”或者“最小值最大”的情况。

      但其实这里求得是“最大值最大”。所以二分是不可行的。

    • 在用“类 Kruskal” 求解时,没有想到要标记最大位置,以为是对所有的度数为最大值的点无脑加一遍边。

  3. 思路分析:

    看到:

    使得树上顶点的最大度数尽可能地大。

    应该想到贪心。

    看到"生成树",应该想到 Kruskal。

    考虑如何将这两个结合起来。

    要使得树上顶点的最大度数尽可能大,可以考虑首先将度数最大的节点加进生成树中,最好情况下是将度数最大的点所有边也加入到生成树中去。由于我们是贪心,那就先无脑把度数最大点的所有边加入生成树中。

    然后无脑加边,直到所有节点都在树上(可以用 Kruskal),即构成一棵生成树即可。


CF525D Arthur and Walls - 洛谷(同步于 2022.6.17 做题记录)

  1. 题意概述

    给出一个 \(n \times m\) 的矩阵,里面有“\(*\)”和“.”两种符号,要求把最少的“\(*\)”变成“.”,使得“.”的联通块构成一个矩形。求最少需要变几个“\(*\)”。

  2. 障碍

    刚开始看到这道题第一眼思路是,

    对于一个"\(*\)",如果它所在的行和列上下左右都有“.”,那么这个位置就要被变为"."。

    那么只要遇到"."直接标记所在行和列然后判断一下即可。

    但这样做实际上连第二个样例都过不去。(我还写了半天代码直到测样例的时候才发现做法假了)。

    然后就一直卡在什么情况下才能变成矩形这个瓶颈上。。

  3. 思路分析

    实际上经过观察(瞪眼)可以发现只有以下四种情况可以被改变成矩形:

    *.  .*  ..  ..
    ..  ..  .*  *.
    

    那么我们直接从一个是"\(*\)"向八个方向 dfs,只要是这四种情况中的一种,就把这个位置变成"."即可。

    那么为什么要 dfs 呢,我们直接判断一下然后把这个位置改了不就行了?

    但是你在改这个位置的时候有可能会使得其它位置的情况发生改变,对于其它位置产生新的情况,所以必须向八个位置 dfs。

    这是一道很巧妙的题目,虽然说想出来之后发现蓝题可能有点恶评,但是这道题思维含量还是很足的。



CF839B Game of the Rows - 洛谷(同步于 2022.6.20 做题记录)

  1. 障碍:《看错题看错俩小时》

  2. 题意概述:

    现在有 \(K\) 个队,飞机有 \(N\) 排座位,每排能坐 8 个人,不同队伍的人不能坐相邻的位置。

    相邻情况有 5 种 \((1,2),(3,4),(4,5),(5,6),(7,8)\)。请问这 \(n\) 排座位是否够坐。

    (K 个队的总人数小于 \(8⋅N\)

  3. 思路分析:

    考虑一个贪心策略。

    先考虑用四人座,四人座用完再用两人座,最后考虑单人座。

    多余的四人座也先用于双人座,再考虑单人座。

    这是显然的,因为如果四人座用不完只能用来当做单人座或者双人座,显然不划算。

    双人座同理。

  4. 写挂了的地方:

    每次查找度数最大点时,要标记其位置。不能无脑将所有度数最大点的所有边都加入到生成树中去,这样可能导致构不成生成树。所以我们只要加其中一个度数最大点的所有边即可。

posted @ 2022-06-18 13:53  向日葵Reta  阅读(54)  评论(0编辑  收藏  举报