2019正睿Day1题解

1.seq

奇数和偶数显然是独立的,我们只考虑其中一种即可。
如果没有要求字典序最小的话,则显然相对位置不变的方案是最优的,那么我们可以直接得到一种合法方案以及最小代价。
我们用 xi 表示第 i 个数是往左,往右还是不变,那么按 xi 分段后显然每一段是独立的,否则代价一定大了。
那么我们考虑 xi 相同的一段。如果他们都是向左的,那么我们可以按照从大到小的顺序,每个数字都尽可能向后面放。而如果都是向右的,我们按照从小到大的顺序每个数字都尽可能往前面放即可。可以发现,这样的两种放法都可以最小化字典序,因此都是对的。
时间复杂度: Θ(n log2 n)。

2.bulb

考虑建出一张图,他的点就是原来的灯泡 1, 2, · · · , n。然后如果 i 和 i + 1 都是亮
着的,那么就把他们之间连一条边。
那么一个极长亮灯区间就对应图中的一个联通块。因为链也是树,所以连通块数
等于点数减边数,即极长亮灯区间数等于亮着的灯泡数减去连续亮着的灯泡数。
前者显然可以非常方便地维护,考虑如何维护这个连续亮着的灯泡数。
设阈值 B,则我们可以把所有颜色按照对应灯泡个数和 B 的关系分为大小两种。
若翻转的是小的颜色,则我们直接可以暴力枚举这种颜色中的所有点,然后计算
连续亮着的灯泡数。
否则如果翻转的是大的颜色,则和它相邻的颜色有两种:小的和大的:
• 如果是大的,那么因为大的颜色只有 Bn 种,所以只要先预处理出任意两种大的
颜色之间有多少条边可以连,然后直接枚举这个另外的大的颜色即可。
• 对于小的的情况,我们考虑在小的那里处理。即,在枚举小的点的时候,如果
周围遇到了一个大的颜色,则我们就在这个大的颜色上打一个标记,表示如果
它翻转了那么会造成多大的改变即可。
时间复杂度: Θ(q(B + Bn )),取 B = √n 即可做到时间复杂度 Θ(q√n)。

3.match

显然对于某个 k,若存在这样的 k 个人,那么必定唯一。
这是因为我们如果存在某两个合法集合 S 以及 T,一定存在 u ∈ S 而 u ̸∈ T 以及 v ∈ T 而 v ̸∈ S。根据合法集合的定义,我们从 S 的定义可得 u 胜过 v,而从 T的定义可得 v 胜过 u,矛盾。因此这样的集合一定唯一。
设 Fn,k 表示 n 个人中存在这样 k 个人的概率,考虑转移。
考虑如何计算 Fn+1,k,如果 n+ 1 在集合外,那么他一定要输给前面的这 k 个人,而这 k 个人的编号都比他小,因此概率为 pk。如果他在集合内,那么他要赢前面的n − k + 1 个人,因此概率为 qn−k+1,其中 q = 1 − p。因此,我们有Fn+1,k = Fn,k · pk + Fn,k−1 · qn−k+1
同时,我们也可以通过考虑 1 这个人来做出转移。如果 1 在集合外,那么他要输给后面的这 k 个人,而这 k 个人的编号都比他大,因此概率为 qk。如果他在集合内,那么他要赢后面的 n − k + 1 个人,因此概率为 pn−k+1。因此,我们又有Fn+1,k = Fn,k · qk + Fn,k−1 · pn−k+1
所以,我们有Fn,k · pk + Fn,k−1 · qn−k+1 = Fn,k · qk + Fn,k−1 · pn−k+1
也就是说,Fn,k · (pk − qk) = Fn,k−1 · (pn−k+1 − qn−k+1)
此外 Fn,0 = 1,所以如果 p ̸= q,即 p ̸= 1/2,我们就可以在 Θ(n) 的时间内算出所有的 Fn,k,从而得到答案。
而剩下的情况是 p = q,则此时和下标无关,任意两个人之间一个人胜利的概率
都是 1/2。因此,我们考虑选出 k 个人作为最后的胜者,则有Fn,k = (nk) · 2k(n1−k)
两种情况的时间复杂度都是 Θ(n) 或 Θ(n log2 n)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值