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

博主分享了在算法竞赛中的经验教训,强调了即使简单题目也不能掉以轻心。提到在处理哈希问题时由于不熟悉导致错误,指出可以用桶来优化。在其他题目中,博主探讨了如何通过分析问题优化解法,如使用单调队列和动态规划。总结中提到要加强代码调试能力和仔细阅读题目,避免遗漏条件。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值