• 2020.10.07【NOIP提高A组】模拟 总结


    估分:(100 + 100 + 0 + 0 = 200)
    考场:(0 + 100 + 0 + 0 = 100)
    ((45))

    (T1)

    考场打了个(hash)。不知道为什么炸了。
    而后发现,原来不需要模。(K<=10),而最多只有四个字母。
    所以最大也就(5^10)次方左右吧,只有(100+)万,用个桶来维护最后扫一遍即可。

    (T2)

    显然可以发现,只有当两个数同号的时候最后才会越走越远。
    而且越远的话增速度会不断增。
    于是考虑不停地走,直到同号且其中一个的(abs)大于给定的(a0)(a1)才停止。
    在这些数里面去(max)(min),以及判断一下后面是否还有(S[])再做做即可。

    (T3)

    考场打了个线段树来做,结果一直没有调对。(WA0)
    正解是用一个单调队列来维护扔出去的数的递增。
    再用一个队列来维护真实的扔出去的数。
    而后有一个值记录当前前([1,k])都曾有过的(k)
    答案便是(k)与单调队列中的队头去(min)
    要注意细节

    (T4)

    考场没有怎么想,被(T3)搞死了。
    正解是设了两个(DP)转移((floyd)
    我们设(f[u][c])表示从(u)点开始花最多(c)元钱可以走的最长路程。
    显然可以用(f[u][c]=max(f[v][c-p[u]]+dist[u][v][min(c,c[i])]))
    而对于那个(dist),如果我们直接看(c)来转移肯定炸。
    但我们发现,对于一个点(i),我们需要求的只是用(min(c[i],C))的油量能走到的最远路程。
    而这个东西我们可以用倍增的思想来处理。对于(k=min(c[i],C)),我们将(k)用二进制来表示,对于(1)我们就可以用(g[i][j][l])来转移。
    (g[i][j][l])表示(i)(j)(2^l)条路能走的最远路程。而这样我们就可以快速求出(f[u][c])了。时间(O(n^3*logn))
    然后询问的时候就二分处理一下即可。

    总结

    有些简单的题也不要掉以轻心。
    (hash)打得不多,导致错误率较高。
    还有有些题明明可以用更简单的方法,一定要多想想。
    比如直接用桶来代替(hash)
    代码的调试能力有待加强。
    有的时候题目太长了,但一定要看清楚,不要遗漏了条件

  • 相关阅读:
    Salesforce Javascript(四) 展开语法 ...
    salesforce零基础学习(一百零二)Limitation篇之 CPU Limit
    salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容
    php orm的C扩展 ycdatabase
    php ice框架
    不错的PHP扩展
    php的各种序列化对比
    ubuntu 使用tree打印树形结构
    文件写入速度对比
    服务器cli模式下的定时器
  • 原文地址:https://www.cnblogs.com/jz929/p/13776927.html
Copyright © 2020-2023  润新知