CF 981 Review

CF 981 Review

打的最差的一场 Div.3

虽然可能有Div.3是ICPC赛制的原因,但是本质上还是自己太菜了。

A

模拟

Code

B

稍微难写一点的模拟

Code

C

分析

据锚具所说应该是可以直接构造,但是我还是没有想出来,不过对于我来,即使DP的水平确实很低,但是这个DP还是很显然的吧。

拆成两半分开进行DP,把“是否交换”塞进状态里,然后最后合起来的时候统计一下合并的代价就好了。

Code

D

最烦的一集,赛时四十分钟写完前三题,五十分钟想到D的DP做法,以为要上大分了,结果发现好像死活调不出来优化以后的做法,最后发现从暴力DP到优化后的DP需要多加一步初始化,实在是逆天,一直到最后两三分钟才改出来。

分析

也可以定义 dp[i][0/1] 为,考虑完前 i 个数 ,第 i 个是否作为右端点的最大合法段数,然后就很好 DP 了。

暴力做法是 O(N2) 的,当然只需要开一个 map 来记录最大值就可以做到 O(nlogn) ,然而由于我实在是太喜欢 unordered_map 了,所以没写普通的 map ,导致赛后被卡了 umap ,hack 掉了 D 题,我真的会谢。

AC Code

E

还是挺考验思维的一道题,大概想一想的话,应该半个小时左右能做出来,但是这题放的位置似乎有点过于逆天了,通过数和 C 题差不多。

顺便吐槽一句,为什么 D 过的人比 C 多了这么多?

分析

可以很显然地想到,如果一个点,或者是一个点对已经符合条件了,那么我肯定不会去操作它/它们了。

那么又怎样通过最小的代价把剩下的进行操作呢?

可以想到通过“成对”的方式来构造,代价是最小的,而且也没有最小的代价了。(因为交换本就是基于“成对”而存在)

Code

总结

复杂度正确的时候,能直接用 map 就直接用 map,不要什么时候都写 umap,在数据极限的情况下单次操作可以被卡成 o(n)

posted @   Hanggoash  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
动态线条
动态线条end
点击右上角即可分享
微信分享提示