• 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)
    代码的调试能力有待加强。
    有的时候题目太长了,但一定要看清楚,不要遗漏了条件

  • 相关阅读:
    LUSE: 无监督数据预训练短文本编码模型
    LM-MLC 一种基于完型填空的多标签分类算法
    一种基于均值不等式的Listwise损失函数
    知识蒸馏基本知识及其实现库介绍
    自然语言处理中的负样本挖掘
    milvus和faiss安装及其使用教程
    Pyinstaller打包通用流程
    自我介绍
    作业十二
    作业十一
  • 原文地址:https://www.cnblogs.com/jz929/p/13776927.html
Copyright © 2020-2023  润新知