「考试总结」2020-11-30 低智

T1

把式子列出来

如果两个点可被一个机器人接到,那么存在

[t_a-t_bge |s_a-s_b| ]

考试的时候根本没有往这个方面想

然后可以得到两个:

[t_x+s_xge t_b-s_b ]

[t_x-s_xge t_b-s_b ]

那么发现这个式子只和一个项有关,那么先 (sort) 所有的第一维,即加和的形式

在第二维里面用 (set) 加上 (upper\_bound) 实现最大上升链计数

其实据说这个部分是导弹拦截

没做出来的原因是没有列式子,看到题解里面的式子就会了

T2

这题目没做出来的原因是没读懂题目,听 (Gjk) 说的时候才明白啥意思……

如果现在钦定一个 (x+y) 的值,我们搜索所有的方案,如果存在一个方案使得两个选定的集合没有交集,那么这个值不合法

所以考虑所有没有交集的情况,即如果两个集合算出来 (&) 值为 (0)

这部分预处理每个无交集的情况下每个集合的数目

那么把所有处理出来的矩形放到坐标系里面,((0,0),(x_i,y_i))

矩形里面的点都不行

那么按照 (x) 排序之后对于所有的 (y) 不断取 (max) 进行更新答案即可

T3

非常有技巧,收获挺大的一个题目

转化一下题面,转化为钦定吃掉多少个水珠 (k),然后求最小的水量消耗

那么定义 (f_{i,j,0/1}) 为当前区间在 ([i,j]) 同时在区间的左/右端点的最小水量消耗

所以转移考虑区间 (dp) 即可,长度乘上时间,同时考虑如何维护转移的问题

这里比较巧妙地把前缀和拎进来用了,每次剪掉的消耗量是后面的数量乘当前的消耗时间

方程如下:

f[i][j][1]=min(f[i][j-1][0]+(i+k-j)*(a[j]-a[i]),f[i][j-1][1]+(i+k-j)*(a[j]-a[j-1]));
f[i][j][0]=min(f[i+1][j][0]+(i+k-j)*(a[i+1]-a[i]),f[i+1][j][1]+(i+k-j)*(a[j]-a[i]));

最后枚举所有长度为 (k) 的区间,减掉消耗即可

T4

这题目没做出来的原因是:没有列式子

记前缀和 (s_x),设 (q_x)(x) 之前剪掉的数,形式化地写出来就是 (-min(s_j-s_{l-1})[l-1le jle x])

那么答案就是 (q_r-minlimits_{i=l-1}^r (s_r-s_{i}+q_r-q_i))

所以推一推就是区间最大子段和

线段树即可……

原文地址:https://www.cnblogs.com/yspm/p/14062294.html