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

  • 相关阅读:
    如何得到需要下载文件的链接(路径)?
    Python之内存泄漏和内存溢出
    IO多路复用
    python-socket和进程线程协程(代码展示)
    Xshell(远程)连接不上linux服务器(防火墙介绍)
    Shell--变量
    Python读写配置文件模块--Configobj
    python文件处理之fileinput
    python之commands和subprocess入门介绍(可执行shell命令的模块)
    linux下 > /dev/null 2 > &1 的意思和如何在后台启动进程
  • 原文地址:https://www.cnblogs.com/wyxwyx/p/cfr514.html
Copyright © 2011-2022 走看看