zoukankan      html  css  js  c++  java
  • [补题]SWERC-2018

    SWERC-2018

    A题是个暴力就能过的签到

    过完A看到有个队伍过了D,就去看了下D题,给平面内若干个点,你要选一条直线(y=p)作为主干道,从((0,y_0))出发,每次可以选择上/下/右地走,问最短距离。

    一开始看到有绝对值先想了个取中位数的做法,然后发现如果一个(x)有好几个(y),直接算就会出问题:对于一个点(x_0),假设这里(x)的最大是(mx),最小是(mi),如果(p<mi),代价是(2|mx-p|),如果(p>mx),代价是(2|p-mi|),否则代价是(2|mx-mi|),三种情况的代价不一样,直接取中位数就出了问题,当时没细想,注意到这东西可以三分:如果(p)太大或者太小,都会导致答案很大。

    实际上也可以证明这东西是单峰的:假设在(p=p_0)处取得最小值,扰动当前的,比如让(p)变大,那导致的结果将是对于(pgeq mx)的部分(记为(Part1)),代价(2|p-mi|)变大,对于(p<mi)的部分(记为(Part2)),代价变小,而如果(p in[mi,mx))之间的则不变。同理,对于(p)变小的情况,取等条件稍微改一下,Part1变小,Part2变大,于是整体代价变大变小只取决于Part1多还是Part2多。对于(p=p_0)的位置,Part1和Part2的个数的差值一定不超过1(不然就更优了),(而且如果可以,应该是(|Part2|-|Part 1|=1)(|Part 1|-|Part 2|=1)这两个位置都能取到最优)

    这样一来,如果(p)变大,(|Part 1|)单调不减,(|Part 2|)单调不增,代价单调不减,对于(p)变小也类似地,所以整个代价和(p)的函数关系就是一个单峰的啦。

    于是就写了个三分:https://paste.ubuntu.com/p/mYFZYd6FVb/

    当然其实这官方给的做法还是中位数…你看都分析到这一步了,这不是和当初分析中位数的时候一样一样的,把(mx、mi)拎出来做中位数就行啦…

    再往下是B题,一开始读完题想到了poj那个经典的单调栈的题,但想了想发现不知道怎么搞,就开始想暴力,(Nleq 10^5),多带个log好像也能过,那我就二分+线段树吧…枚举我们要找的最大子正方形从第(i)行开始,在第(j)行结束,这里对(j)二分,然后这样子边长就只取决于(min_i{b_i}-max_i {a_i}+1)是多少,这可以拿个线段树维护一下:https://paste.ubuntu.com/p/sZv2P2DKSp/

    接下来E题一直给我卡到比赛结束都没过,不说了(

    K题给个字符串,问最短能够压缩成多短(比如(aabaabcdda)能压成((a^2 b)^2 c d^2a),长度是5),赛后补掉的,好像一旦往区间dp去靠就有想法了,dp的一边用哈希之类的东西判一下,能整段压缩就直接压缩:https://paste.ubuntu.com/p/3WT9gskc3Q/

    差不多了,该复习期中考了

  • 相关阅读:
    Saltstack自动化操作记录(1)-环境部署
    Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇
    Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINK answers: File exists处理
    Python下操作Memcache/Redis/RabbitMQ说明
    libsm6 & libgtk lost (QQ + WPS: Ubuntu)
    Android中View绘制优化
    Android ListView 几个重要属性
    Android Layout_weight 属性
    Java关键字final、static使用总结
    Android 事件
  • 原文地址:https://www.cnblogs.com/yoshinow2001/p/14729798.html
Copyright © 2011-2022 走看看