BIT training short round #2 summary

BIT 校赛 2.5h场第二场总结

  • solved 5/6 , rk 5

又是送罚时的一天(8发)

历程

最开始在 C 卡住,边上点的处理一直写不对(哎哎 corner case 咋这么难写),还送了 2 发,挂样例也要算罚时,哭。

D 偷懒写的 Qlog2n 被卡了。

E 写 ull 哈希又被卡了,再也不写 unsigned 哈希了。 😦

部分题解

C - Missile Silos

原题

主要说一下边上点的处理,设 du 为最短路,一条边 (u,v) 下,设 lu 为距离 u 多少距离的边上的点使得从 u 和从 v 到这个点的最短路一样,就是求这条边的重心。得到 lu=dvdu+w2 ,加上 du 得到起点到这个点的最短路 dv+du+w2 ,那么从 uv ,最短路经历 dudv+du+w2dv 的过程,判断一下就行。

E - String Compression

原题

一个字符串的最优拆分是选最小循环节,因为数字位数的增长很慢。

通过求出字符串 s1nnext 数组,该字符串的最小候选的循环节长度为 nnextn ,若 n 不能整除这个值则该字符串没有循环节。

也可以哈希枚举循环节长度暴力判断,复杂度是调和求和,多一个 log

求出所有子串的最小循环节,线性 DP 即可,复杂度 O(n2)

小教训:不要用 unsigned 哈希,会变得不幸。

F - Bear and Company

原题

最开始想的区间 DP,但写不出来 QAQ 。

把不属于 V,K 的字符统一设成 X

我们考虑线性的把目标序列排好,设 fv,k,x,0/1/2 表示把原字符串前 v 个字符 V,前 k 个字符 K ,前 x 个字符 X 全部向前移动到前 v+k+x 个位置上组成合法串,且最后一个字符是 v/k/x 的最小代价(其他的字符都不做操作)。

转移的时候,考虑多选一个字符,以选 V 为例子,把它放到后一个位置,即第 v+k+x+1 个位置,移动的次数就是前 pos 个位置中有多少个字符不在当前状态排序的字符内,pos 是第 v+1 个字符 V 的位置,这个可以预处理出来。注意 K 不能移到 V 后面,由第四维状态限制。

为什么要这么转移,我们遇到 VK 串时,直接交换 VK 不一定是最优的转移,样例 VVKEVKK 就是个例子,我们交换 EK 是更优的,体现在状态里就是把前 2V 和前 1X(E) 排好的最优代价。

总复杂度 O(n3)

posted @   蒻蒻虫  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示