[CF]Round514

A Cashier

题意:一个人,一天的工作时长为\(L\),从第\(t_i\)时刻开始有长度为\(l_i\)的工作,他想在工作间隙抽烟,抽一根要\(a\)分钟,问能抽几根。

直接模拟。

B Forgery

题意:给定一个由#.构成的矩阵,问能否用一个3*3但是中间是空的由#构成的“画笔”可以重叠的画出这个图形。

其实也是模拟,就是把给定的图中能涂的笔画全都涂上,然后比较生成的图和给定的图有何不同就行了。

C Sequence Transformation

题意:给定一个\(1..n\)的序列,定义变换为:将该序列中的所有数的\(\gcd\)放入答案序列中,然后删除一个数。求字典序最大的答案序列。

由于要字典序最大,所以要尽可能早的构造出一个非\(1\)\(\gcd\),可以想到,最好构造的(删除的数最少的)\(\gcd\)就是\(2\)(只用删除一半的数),然后就出现了一个规模更小的形式相同的问题:构造\(2,4,6,8,..\)的最大的答案序列。递归进行这个步骤就行了。注意只剩\(3\)个元素的时候,样例给出了更好的解决方案(1,1,3)。

D Nature Reserve

题意:给定一些平面上的点,问能否用一个与\(x\)轴相切的圆把它们包起来,如果能,输出最小的半径。

容易发现,如果这些点的纵坐标有正有负或有多个在\(y\)轴上,那就不可能有一个满足条件的圆。设圆心为\((x, y)\),容易发现半径就是\(y\),那么有\((x-x_i)^2 + (y-y_i)^2 \le y^2\),化简可得:\(x_i - \sqrt{y_i*(2y-y_i)} \le x \le x_i + \sqrt{y_i*(2y-y_i)}\),由于两侧的界是单调的,所以可以二分\(y\),看是否有满足条件的\(x\)

注意二分的上界是很高的,对于这样一组点\((10^7, 10^7), (-10^7, 10^7), (10^7, 1), (-10^7, 1)\),半径的长度高达\(5\cdot 10^{13}\)的级别。所以二分上界要尽可能的高一些。这样的复杂度是\(O(n\log C)\),其中\(C\)是二分上界。

这个题还有许多其他做法,比如在二分\(y\)之后,看以每个点为圆心,\(y\)为半径的的圆和直线\(y = y\)的交点判断是否有解。据说还有\(O(n \log n)\)的做法。

E Split the Tree

题意:给定一棵有根树,点有点权,问最少能用几根点数不超过\(L\)的,总点权不超过\(S\)的,直上直下的链不相交地覆盖这个树。

可以DP也可以贪心。首先预处理出每个点向上能走多远(倍增),然后对于某个点,我们可以贪心的选择儿子中的能跑的更远的点来扩展到这个点。

posted @ 2018-10-06 10:56  wyxwyx  阅读(122)  评论(0编辑  收藏  举报