2018-2019 ACM-ICPC, Asia Seoul Regional Contest E题(分段函数二分)

首先放上队友的博客

 

看到最小最大值第一反应是二分,但是不明白怎么二分,看了队友的博客,以下胡言乱语全是根据队友博客的自己理解

首先我们的目标是errorF最小,设该最大误差是x,那么对于每个点l_i,其误差都要小于x

现在我们考虑两个点,(v_1,minn),(v_2,maxx)(v_1,l_1),(v_2,l_2) l_1<l_2,若它们处于分段函数同一段上,即他们的F(v_i)都是是\alpha

l_1,l_2都小于\alpha,则要求\alpha-l_1<=x

l_1,l_2都大于\alpha,则要求l_2-\alpha>=x

l_1<\alpha\ \&\&\ l_2>\alpha,则同时要求\alpha-l_1<=xl_2-\alpha>=x

我们的问题是什么情况下(v_1,l_1),(v_2,l_2) l_1<l_2不能放在同一段呢?

这里需要想明白的一点是:考虑不适合放在同一段的时候,直接讨论第三种情况。

因为前两种情况,误差都会大于l_2-l_1,要控制误差小于x,即l_2-l_1<误差<x,对x的要求就会比第三种情况要大

不适合放在同一段的情况:l_2,l_1直接距离差的太大了,大于2*x的时候,就无法满足他们的函数值相同且误差小于x了

我们这样想象,在线段l_1,l_2之间插入线段\alpha,使得\alpha到它们都不超过x,当l_2-l_1>2x时,无论\alpha放在哪,距离l_1小于x必然意味着距离l_2大于x,反之同理。

据说画图更易理解,厚颜无耻地贴个丑图_(:з」∠)_

接下来就是要利用二分,二分有点求什么设什么的意思在里面。

设最小误差是x,按照v从小到大排序的时候,我们首先可以得到一个下界maxx=minn=l_1,遍历后面的点去更新maxx,minn,当出现maxx-minn>2*x时,属于分段函数同一段的点就被找完了,然后继续往后找,如果能找到三段区间,那么x可以更小一点,若不能找到三段区间,说明x太大了,太多的点被分为同一段了

以上,分析完毕(*^▽^*)

代码中注意事项:

v=0的时候F是0,误差为l,误差最大最小值一定不小于l,它们的误差固定了,所以不需要考虑v=0的点

疲辽,等这周被虐完再写这道题代码

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值