• 模拟37 题解


    A. 简单的区间

    看到这种题,一眼就是枚举最值,则确定左右区间,统计跨最值点的答案。

    维护前缀和后缀和就完了。

    于是自然地想到用个主席树,还是枚举小的区间,复杂度$O(nlog^2n)$。

    复杂度证明见模拟31 C.English

    正确的算法一定无法避免枚举小区间,已经带了一个log,

    O(1)查询,估计得用桶。

    所以算法流程是:

    先$solve(轻儿子)$,

    回来把桶整个清空。

    接着$solve(重儿子)$,

    接着枚举轻儿子,在桶里找贡献累加。

    接着再枚举轻儿子,维护好整个桶。

    B. 简单的玄学

    路丽姐姐教你古典概型系列。

    设$dp(i,0)$表示已经选择了i次,还没有重复的方案数。

    $dp(i,1)$表示已经选择了i次,已经有至少一个重复的方案数。

    显然$dp(i,0)=dp(i-1,0)*(2^n-i+1)$

    $dp(i,1)=dp(i-1,1)*2^n+dp(i-1,0)*(i-1)$

    最终答案就是$frac{dp(m,1)}{2^{nm}}$。

    然而以上全是扯淡没必要打这么麻烦,

    发现$dp(m,0)+dp(m,1)=2^{nm}$

    $dp(m,0)=frac{2^{nm}!}{(2^{nm}-m)!}$

    只要算出$frac{dp(m,0)}{2^{nm}}$,再一减就可以了。

    在取模的意义下约分是很困难的。

    但是本题保证分母质因子只有2,只要提出分子中的2就可以了。

    发现显然$(2^n-i)$中质因子2的个数与$i$相同,于是问题又转化成了求阶乘中质因子2的个数。

    不断给阶乘的最大项>>1,求和就行了。

    理由是分别统计$2^i$的倍数。

    C. 简单的填数

    一道贪心题,被我打成了dp

    设dp(i,j)表示第i个受限制的点,前面已经连续了j个与它相同的数。

    值为1表示合法,0表示不合法。

    记录前趋。

    最终找到最优答案,生成一个方案就可以了。

    这种打法细节很多。

  • 相关阅读:
    四则运算出题器
    四则运算出题网页
    四则运算自动生成器实现(python、wxpython、GUI)
    python 实现小学四则运算
    Process and Thread States
    COS AP-开启WPA后无法关联SSID!
    WLC MAC Filtering
    禅道--个人理解 简单介绍
    IDEA解决乱码
    avue 实现自定义列显隐并保存,并且搜索表单、form表单、crud列顺序互不影响。
  • 原文地址:https://www.cnblogs.com/skyh/p/11470826.html
Copyright © 2020-2023  润新知