• 「题解」NOIP模拟测试题解乱写II(36)


    毕竟考得太频繁了于是不可能每次考试都写题解。(我解释个什么劲啊又没有人看)

    甚至有的题目都没有改掉。跑过来写题解一方面是总结,另一方面也是放松了。

    NOIP模拟测试36


    T1字符

    这题我完全懵逼了。就是来教我们打暴力和高级一点的复杂度分析的??

    然而暴力拿走,复杂度分析并没有get到。调和级数是啥??

    度娘:

    调和级数(英语:Harmonic series)是一个发散的无穷级数。调和级数是由调和数列各元素相加所得的和。中世纪后期的数学家Oresme证明了所有调和级数都是发散于无穷的。但是调和级数的拉马努金和存在,且为欧拉常数。……

    级数是啥??拉马努金和是啥??一脸懵逼。

    不过暴力打法给我上了一课。倒不是这道题的暴力打法有多么高明,只是告诉我不要钻进死胡同。

    我一开始想的是枚举循环节的长度$len$,然后根据前$len$个数字中已填的位置确定一个循环节,根据$m$个已知位置check。

    然后发现这样不可做。因为我还需要枚举一下上下界,还要调和一下$len$范围内的各个数字的个数。于是非常难过。

    然后一直想一直想一直想。。。。

    后来Larry告诉我直接用$m$个已知位置和枚举的$len$确定循环节就好……然后贪心……

    值得一提的是一个柿子,赛时曾经让我很难受:$(i-1)%len+1$直接mod的话$len$的整数倍的位置就会出现$bug$。

    于是$-1$,$mod$后$+1$。完美解决。

    T2蛋糕

    模板区间dp??然而很久没打区间dp再加上以前太水。。。

    T3游戏

    我没读懂题意……一直以为所有莉露露一起动。后来发现最优情况下肯定不能所有莉露露一起动啊……

    考虑莉露露的四种操作:拿起由岐,放下由岐,扔出由岐,抱着由岐飞。

    发现拿起和放下都没用,充其量就是换一个莉露露来接他。

    考虑由岐的状态:一种是被扔出的状态,一种是被莉露露抱着飞的状态。

    而由于被扔的状态中不能拐弯,于是被扔出去的状态又分为两种:横着飞和竖着飞。

    所以考虑拆点。把每个点拆成三个:横着飞的状态,竖着飞的状态,被莉露露抱着的状态。

    考虑如何建边:

    对于每一个点:状态1为被莉露露抱着,设状态2为横着飞,状态3为竖着飞。

    对于状态1:可以由莉露露抱着向上向下向左向右飞,权值都是C。

    也可以选择原地抛出让由岐进入“飞行”状态(滑稽),B可以在这里结算。于是权值为B。

    对于状态2:可以继续向左飞,也可以继续向右飞,也可以选择在这个点降落。

    继续飞的权值都是A,而降落需要考虑这个点有没有莉露露。无论有没有我们都可以视为召唤一个最近的莉露露过来接她。

    于是考虑预处理每一个点最近的莉露露过来所需要的花费。

    考虑多源点bfs预处理。然而有同学说了:莉露露会动啊。

    的确会动,但是我们通过仔细考虑发现,假如莉露露1号通过某种交易将由岐交给了莉露露2号,再由莉露露2号交给莉露露1号,这样肯定是不优的。

    所以每一个莉露露只会接由岐一次。这样下来预处理最近的莉露露赶过来需要的权值就正确了。

    状态3同上。

    建边后跑一边无脑堆优化dijkstra就行了。

    完结撒花。

  • 相关阅读:
    cento7快速修改主机名和修改root密码
    [goolegke]nginxingress建立测试
    filebeat安装读取nginx json日志
    MySQL索引背后的数据结构及算法原理
    Lua脚本在redis分布式锁场景的运用
    Sentinel实现限流
    java架构技术流程图
    mybatis数据加解密处理方案
    vue 自定义代码片段
    node项目vue 自动化部署之pm2
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11468381.html
Copyright © 2020-2023  润新知