[CF]Round514
Posted wyxwyx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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)),半径的长度高达(5cdot 10^{13})的级别。所以二分上界要尽可能的高一些。这样的复杂度是(O(nlog C)),其中(C)是二分上界。
这个题还有许多其他做法,比如在二分(y)之后,看以每个点为圆心,(y)为半径的的圆和直线(y = y)的交点判断是否有解。据说还有(O(n log n))的做法。
E Split the Tree
题意:给定一棵有根树,点有点权,问最少能用几根点数不超过(L)的,总点权不超过(S)的,直上直下的链不相交地覆盖这个树。
可以DP也可以贪心。首先预处理出每个点向上能走多远(倍增),然后对于某个点,我们可以贪心的选择儿子中的能跑的更远的点来扩展到这个点。
以上是关于[CF]Round514的主要内容,如果未能解决你的问题,请参考以下文章
LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意
Codeforces Round #514 (Div. 2)
Codeforces Round #514 (Div. 2)
Codeforces Round #514 (Div. 2) D. Nature Reserve
Codeforces Round #514 (Div. 2) C. Sequence Transformation(递归)