zoukankan      html  css  js  c++  java
  • 模拟测试20191028

    $T1:Dove 打扑克$

    根据等差数列求和公式,我们发现同时最多有$450$种大小,约为$sqrt n$

    那么我们可以用并查集维护块的大小,以及块大小为多少的块有多少个

    用STL瞎搞一下就好,$O(qsqrt n logn)$可过

    还有一种$O(qsqrt n)$的做法

    我多一个$log$的原因是每次遍历的是$set$而不是数组

    考虑直接用数组维护

    数组虽然不支持$O(n)$以下复杂度的删除,但是由于我们数组大小只有$sqrt n$,暴力删除就好了

    $T2:Cicada 与排序$

    大神题(概率期望都是大神题

    显然我们只关心相同数之间的相对位置

    考虑对每个数分别$dp$

    设$dp_{i,j,k}$第$k$层当前处理的数中第$i$个放到第$j$个位置的概率,$g_{a,b,i,j}$表示左边$a$个数,右边$b$个数时左边第$i$个放到第$j$个的概率

    转移显然有$dp_{i,j,k}=sumlimits _{t=1}^{a+b} dp[i][t][k+1]*g[a][b][t][j]$

    求$g$有很显然的$dp$,不再赘述

    $T3:Cicada 拿衣服$

    (暴力都能过的题有什么好讲的)

    这题突破口在$or-and$上

    考虑对于确定的右端点,往左扫时满足如下性质

    $1,or-and$最多有$log$种取值,且每种取值连续

    $2,or-and$单调递增

    $3,min-max$单调递减

    既然这样,我们考虑找出所有段,这样就可以在段上直接二分了

    经过观察发现,段的改变只有合并而没有删除

    直接用数组/链表维护所有断点就好了

    再用$ST$表优化一下

  • 相关阅读:
    2020年3月22日
    2021年3月21日
    2021年3月20日
    人件集阅读笔记02
    2021年3月19日
    2021年3月18日
    2021年3月17日
    2021年3月16日
    2021年3月15日
    梦断代码阅读笔记01
  • 原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11753409.html
Copyright © 2011-2022 走看看