zoukankan      html  css  js  c++  java
  • CSP-S 模拟91

    简要写一下


      Dove 打扑克

        并查集维护堆的合并,最多合并n-1次,且size不同的堆的种类不可能超过$sqrt(n)$ 种,而且堆的个数越来越小,而且操作次数大概是$3n$

        基于以上几点,我们暴力干它关于合并的操作可以暴力,然后用数据结构等优化查询操作$O(sqrt(n))$或$O(1)$查询

      Cicada 与排序

        概率DP,设f[x][y],表示初始时在x位置的数当前在y位置的概率,cet[y][k]表示归并排序中从两个儿子合并成一个大区间时位置y上的数移动到位置k  的概率

        显然,本轮合并完成后,当前的$f[x][k]=$原来的$f[x][y]*cet[y][k]$,跑一遍归并排序,回溯的时候更新当前的概率,最终得到f[i][j]表示初始i  位置的数排完序后在位置j的概率

        概率乘上对应的j后在加和就是位置i最后的期望位置

      Cicada 拿衣服

        随着区间长度增加,$or$和$max$单调不下降,$and$和$min$单调不上升,$min-max$ 单调下降,而$or-and$ 不确定

        所以考虑二进制下,最多有log位,确定右端点后,找左端点,在左端点的选择范围中一定有一段段$or-and$相等的区间,而这样的区间最多约有log  个,在划分的区间内部$or+min-max-and$ 单调,所以可以二分,可以用链表维护分界点,查找左端点时其实不需要一个个区间二分,因为区间内部单调,  所以找区间最值看是否满足大于等于k,

      从左向右找第一个存在合法左端点的区间,在这个区间二分即可

        打了一下午加半个晚上,没调出来,链表没错,线段树没错,for循环没错,可能会错的我都没错,最后发现不知道什么时候复制粘贴的最不可能错的  一句挂了,提醒广大观众朋友:

      打代码千万不要过于依赖复制粘贴

      

  • 相关阅读:
    排序——选择排序和插入排序
    排序——排序的基本概念
    字符串类——KMP算法的应用
    字符串类——KMP子串查找算法
    字符串类——字符串类的创建(下)
    字符串类——字符串类的创建(上)
    数据结构库——链式队列的实现
    P4180 【模板】严格次小生成树[BJWC2010]
    P2511 [HAOI2008]木棍分割
    P2613 【模板】有理数取余
  • 原文地址:https://www.cnblogs.com/heoitys/p/11755440.html
Copyright © 2011-2022 走看看