2020.11~2020.12 BS集训做题记录

5930 -- 【模拟试题】演出分组

树状数组优化DP,考虑到男女之差不大于K,也就是在这个 mid 查找向左 k 与向右 k 中这个区间的和,从这个和转移过来即可,再在树状数组上修改这个位置。

Code

5937 -- 【模拟试题】生命

曼哈顿距离转切比雪夫距离,操作后就是一个二维前缀和板子题了(转化很妙确实是T1的难度(哭,考场上的二维线段树被卡到暴力分)

Code

5953 -- 【模拟试题】跳跃

折半搜索好题,考场随意的暴力拿了个90.。。解法简单暴力,通过一个递推可以算出 1~mid的每一种和,将这些和存在右端点上

再递推算出 mid+1~r 的每一种和,将这些和存在左端点上(因为要满足递增所以不能存在右端点上),然后直接暴力匹配即可

Code

5985 -- 【模拟试题】01 串

倍增+哈希,因为每一种 x 值的下一种状态是确定的,可以倍增处理出 x 值跳 \(2^i\)步后的字符串hash值,最后二进制拆分匹配即可

Code

5942 -- 【模拟试题】敏感文章

线性计数DP,\(f[i][j]\)表示当前在 第 i 位,敏感字符串匹配到第 j 位,考虑转移,枚举第 j+1 位 如果现在的第 j+1 位=敏感字符串的j+1位,显然转移到f[i+1][j+1] 如果不是的话,转移到next 就可以了

Code

5959 -- 【模拟试题】上升序列

三进制状压DP,0表示还未访问这个点,1表示访问了且已经放在了上升序列中,2表示访问了但已经被弹出,显然合法的答案序列不存在有 0 的情况,而且 1 的个数=给定的 m 如此可以根据设定的状态进行转移了

Code

5918 -- 【BZOJ4919】大根堆

考虑模拟整个最长上升子序列的过程,也就每一个点都维护一个multiset表示这个上升子序列,合并时采用启发式合并,将size 小的合并到size 大的,这样整个过程都是 n log n的,加上multiset 的 insert ,整个过程 \(O(n log^2 n)\)

5914 -- 【BZOJ3133】装球机器

树剖好题,但是如果发现了性质的话可以减少很多代码,首先放球顺序是确定的,(就是原树按照子树最小值排序后的后序遍历)这个过程可以直接模拟得到,取球时直接倍增解决即可.

Code(树剖)

5983 -- 【模拟试题】树上路径

首先统计树上路径,立马想到淀粉质,这道题采用容斥,需要减去再同一子树中的,因为\(P\leq 1e7\),想到桶,桶存储另一条路径的 sum 而我们通过一条路径的 sum 和 maxn 确定这个sum,但是不同路径的maxn 不同,所以考虑排序,排序后整条路径的maxn都是递增的,就可以直接确定另一条路径的sum了,就可以愉快的开始淀粉质板子了

Code

5913 -- 【BZOJ2438】杀人游戏

缩点很显然,就是后面的特判很阴间

Code

5936 -- 【模拟试题】棋盘

在一个点反复横跳就行了。。

Code

5919 -- 【POI2014 Rally】最长路

两遍拓扑 可以求出起点和终点到达一个点的距离(一次拓扑,再两次递推也可以)

然后删除一个点就有几种情况,分开考虑删除的代价再放进堆中维护即可

Code

5975 -- 【模拟试题】农场和工厂Farm and Factory

根据最短路的定义可以列出几个柿子,然后化简可以得到一个类似切比雪夫距离的柿子,转曼哈顿后也就是求选定一个点求出到他的最短路与其他点的最短路的差的绝对值的最小值,显然在中位数处最优

Code

posted @ 2021-06-20 14:15  NuoCarter  阅读(57)  评论(0编辑  收藏  举报