牛客寒假基础算法训练营4(ADFGJL)
A
期望计算 + 推公式
首先,由期望的线性性可知和式的期望等于和式中每一项的期望之和。因此求
易得:
考虑怎样用一个关于
两个区间的交并关系只有三种:
- 相互分离 -> 这个容易得到
- 相互包含 -> 可以拆为 两对相互分离 和 一对相同线段重合
- 相交 -> 也可以拆为 两对相互分离 和 一对相同线段重合
于是等价于求 两条线段相互分离 和 两条相同的线段重合 这两种情况的分子和式,通过推公式可以得到解。具体见代码。
D
思维题 + 贪心
首先短字符串中能与长字符串中字符匹配就要尽可能贪心匹配,这样能保证答案不会更差。
对于匹配上的一对字符,可以作为回文串的外侧。这样就只需要考虑回文串内部的匹配即可。
这样问题就变为:给定一个字符集合,每次操作可以修改一个字符,使得该字符集合可形成回文串的最小修改次数。
考虑回文串:长度为偶数时,字符集合可形成回文串的充要条件为所有字符数量均为偶数;同理长度为偶数时,充要条件为只有一种字符数量为奇数,其余均为偶数。
可见需要尽可能减少奇数数量字符的种类数。最优方案即为每次修改一个奇数字符为另一个奇数字符,这样每一次操作都可以将两种奇数字符变为两种偶数字符,贪心操作即可。
F
二分 + 双指针
求第
这是由模
找到
注意不能直接把所有前
G
主席树
这里换一个与
则问题转化为:求对某个
由
的最大值 的最大值,即整体的最大值
求2很简单,只需要求区间最大值即可。而求1可以用主席树——先查询
J
一道思路很好想但代码较难写的图论题
处理出每个联通块的
-
:部署数不充足,只能挑选前 大的联通块部署。为保证字典序最小,每个联通块部署的肯定是编号最小的结点,然后可以先处理出每个联通块的字典序最小方案( + 优先队列),再用优先列处理每个联通块的方案,保证最终构造序列的字典序最小即可。这是我的做法,比较麻烦,实际上不需要处理每个联通块的字典序最小方案,将所有初始点放进一个优先队列里,同时对多个联通块做一次 即可。 -
:部署数有剩余,显然可以部署到所有联通块,但盈余的部署数需要服务于字典序最小。可以贪心地考虑:在剩余部署数 未部署的联通块个数时,可以直接部署当前未在序列中的编号最小的结点,当然如果可以通过在当前序列中的点直达,就不需要浪费部署次数,直接加入序列即可。从 开始贪心地按顺序考虑,直到剩余部署次数 未部署联通块个数时,某个前缀 一定是序列的前缀。再对 继续采用1的思路即可。(代码写得比较麻烦qwq...)
L
典题
题目:对于两个数组
这种题首先一定要想到拆位,将每个二进制位的贡献分开计算,最后求和。
如果题目改为求:
那么问题就变得很简单了—— 对于第
其中
而两式区别在于
可以
那么对于
证明:模拟一下即可
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战