zoukankan      html  css  js  c++  java
  • 【解题报告】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)。

  • 相关阅读:
    Mootools遮罩层练习(原为网上的jquery写法)
    Notepad++ c编译环境 64
    Apache添加多端口
    数据库权限分配(远程共享数据库)(mysql)
    Zend studio13 导入已有php文件夹
    按钮js跳转到非表单提交页
    Sql case when 小例
    php 获取数组中的key值
    knit使用安装 ecstore knit位置 及调用路径
    python数据库操作
  • 原文地址:https://www.cnblogs.com/aurorapolaris/p/13449118.html
Copyright © 2011-2022 走看看