CDQZ0726陪练记

今天省选难度,带着千万不要爆零的心态开始了考试。

先看了一下,第一个题看起来十分友善,很像模拟,T2又是在树上操作,太恶心,果断放弃,T3是一道数学中的组合。

那么开做T1,T3,然而都没有读懂,不过因为小学很擅长数论,计数,就开干t3,T3配合样例很快读懂,知道了这道题应该就是按位排列的,可是代码能力太弱,写不来,只好写了一个全排列爆枚得30分。然后转攻t1,t1这个题目描述太玄了,在后座vanilla大佬浓郁的花露水味下结合样例再计算花了大概40分钟终于读懂了,看其他dalao他们也都边画图边算抠着脑壳想了半天,我觉得这也算正常吧。

其实这个鬼题就是想说明水的自然下流过程,一是只能在两个挡板上下有交集的地方垂直流下,不能斜着飘着流,而且从上往下的过程中,不能直接流过中间一个挡板,即把它无视掉,当作水流中的一块礁石,瀑布的水流量会因交集变小而变小,而不会因为可流动的空间大而变大。终于读懂了,然而dp很差的我却写不来。。。最后发现是个DAGdp,感觉和我的思路有些相似。

痛苦挣扎到最后依然无果

最后很多dalao都只交了三个暴力,然后4位dalao与我以30分的“好”成绩并列垫底。(也不知高二省选选手和一个初二渣渣并列的感觉是不是超级糟糕)

最后测完外面在下暴雨,没带伞瓜兮兮,没法出去吃饭,还好林先生给我们点了集体外卖乡gay基,不过这个仅仅和学校一街之隔的店送外卖真的是慢,冒雨出去的人都吃完了外卖才送到。。。。

下午抓颓,

下面是三个题的题解:

1 waterfall
从左往右依次扫描,用 set 来维护当前扫描线上的线段。
注意到连边的特殊性。我们要求 i 能向 j 连边的话要求中间不能插个 k ,于是你可以各种乱搞
处理之类的。我的做法是动态删边,用 unordered_set 来维护当前点的出边。每次加入一条线段,
我们就删除一条边并加入两条边。
后面在 DAG 上乱 dp 一通就行了。

2 mst
不妨以任意一个点为根,易知每次询问的答案为:所有激活点到根的路径的并的权值和 - 激活
点的个数 × 所有激活点的公共 LCA 到根的距离。所以,我们同时维护这三个量即可。
如何求所有激活点到根的路径的并的权值和呢?有一个很经典的做法:dfs 这棵树,遇到一个
激活点,就把这个激活点和最后一次遇到的激活点的 LCA 到这个激活点的距离加入答案;如果是
第一次遇到激活点,那么直接把这个点到根的距离加入答案。正确性显然。这样做是可以维护的。
我们求出每个点在 dfs 中被访问的顺序,以此为关键字维护一个 set ,每次加入一个点的话只有相
邻的两个点会对答案造成影响,于是重新维护这几个点的贡献即可。
如何维护所有激活点的公共 LCA 呢?如果有 dfs 序,那么公共 LCA 就是 dfs 序中第一个激活
点与最后一个激活点的 LCA 。正确性也显然。
时间复杂度为 O(n + Q × LCA(u, v)) 。其中 LCA(u, v) 表示查询 u 、v 两点的 LCA 的复杂
度。用倍增/树链剖分可以做到 O(log n) 。

3 permutation

我们把确定 S 的过程看成是一个逐步匹配的过程,就是将 T 的每一位放在 S 的一个合适的位
置。若 Sj = Ti ,则称 j 为 i 的匹配位置。令 fi,j,k 表示已确定前 i 个数,其中有 j 个数的匹配位
置在 i 之后,且目前已经确定的 min 的和为 k 的方案数。我们讨论 i 的匹配位置与 i 的相对关系:
1. 如果 i 的匹配位置比 i 小:转移至 fi+1,j,k
2. 如果 i 的匹配位置为 i :转移至 fi+1,j,k+Ti
3. 如果 i 的匹配位置比 i 大:转移至 fi+1,j−1,k+Ti
最后答案即为 fn,0,K 。

由于这是原创题,就不发题面了。

猜你喜欢

转载自blog.csdn.net/qq_42795001/article/details/81266391