zoukankan      html  css  js  c++  java
  • [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也可以贪心。首先预处理出每个点向上能走多远(倍增),然后对于某个点,我们可以贪心的选择儿子中的能跑的更远的点来扩展到这个点。

  • 相关阅读:
    poj 2485 Highways 最小生成树
    hdu 3415 Max Sum of MaxKsubsequence
    poj 3026 Borg Maze
    poj 2823 Sliding Window 单调队列
    poj 1258 AgriNet
    hdu 1045 Fire Net (二分图匹配)
    poj 1789 Truck History MST(最小生成树)
    fafu 1181 割点
    减肥瘦身健康秘方
    人生的问题
  • 原文地址:https://www.cnblogs.com/wyxwyx/p/cfr514.html
Copyright © 2011-2022 走看看