zoukankan      html  css  js  c++  java
  • 题解 CF535E 【Tavas and Pashmaks】

    宇智波—鼬的此题题解,代码注释很可读。

    一.转化成n条直线

    不难看出,每个人所花费的时间是(t=frac S {s_i} +frac R {r_i})

    不妨设R=1,则(t=frac {frac S R} {s_i} +frac 1 {r_i})

    现在准备一个点((frac 1 {s_i},frac 1 {r_i}))

    (t=frac {frac S R} {s_i} +frac 1 {r_i})

    (k=-frac S R,x=frac 1 {s_i},y=frac 1 {r_i}) ((k<0))

    (t=-kx+y)

    (y=kx+t)

    也就是说,我们拥有了n条直线。

    二.答案在左下凸包上

    对于每条直线,需要寻找使得t最小的k。

    对于一个点A,它的左下方如果有一个点B时,

    (y_A=kx_A+t_A,y_B=kx_B+t_B)

    (t_A=-kx_A+y_A,t_B=-kx_B+y_B)

    (x_Ble x_A,y_Ble y_A)

    (t_B le t_A)

    因此答案在左下凸包上。

    三.关于左下凸包

    可以先排除x和y都比其他的点中某一个小的。

    先按照x从小到大排序,x一样按照y从小到大排序。

    求左下凸包的时候,每两个凸包上的点k<0并且k逐渐减小。

    四.警告

    1.宇智波—鼬 的代码,为了不损失精度,x的存储是(s_i),y的存储是(r_i),不要看着四就搞错了。

    2.要去重。

  • 相关阅读:
    png 的特点
    UIImangeView的用法
    uiTextView简单的用法
    UITextField简单的用法
    UIWindow的简单实用(二)
    UIView的简单实用
    objective-C 复合(组合)
    OC
    objective-C protocol协议
    object-C NSDate
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/13882596.html
Copyright © 2011-2022 走看看