• 省选模拟96 题解


    A. 多边形
    因为本题保证了 (n) 不为偶数,所以 (n) 没有 (frac{n}{2}) 这个循环节。
    然后考虑 (frac{n}{3}) 这个循环节,如果能形成锐角一定有 (m=3)
    如果存在更小的循环节,那么一定不存在锐角了。
    所以尽量特殊处理一下 (m=3) 这个情况,然后对于 (ans_0),用全集-补集去求。
    对于其他的情况,可以考虑求出循环同构意义下合法的边长排列有多少个,给这个玩意乘 (n) 就是答案。
    这个玩意的求法可以是容斥,大概的思想就是如果存在相邻的两个边长之和 (>frac{n+1}{2}) 那么存在一个锐角。
    如果有这个事情,就是说 (x_{i+1} geq max(0,frac{n+1}{2}-x_i-1)+1)
    然后分类讨论这样的 (x_i < frac{n+1}{2})(geq frac{n+1}{2}),可以附加一个权值或者删去一个点之类的,大概恶心一下就能出来了。

    B. 仙人掌
    大神的做法是这样的,考虑每个节点儿子集合中,不同取值的个数。
    可以发现这个玩意最多只能达到 (sqrt{m}) 级别。
    原因是,如果要影响到这个儿子 (son[x]) 的权值:
    要么操作当前节点 (x),对 (son[x]) 的取值个数不产生影响。
    要么操作 (son[son[x]]),那么一次操作只会对单个 (son[x]) 产生影响。
    这样的话随便维护一下不同的取值个数就好了。比较麻烦的是还得考虑父亲方向的权值。
    其实对于节点 (x) 造成影响的只有 (f[x])(son[x])
    对于前者,只要每次操作更新父节点,对于后者,维护每个节点对每个儿子产生共同的影响即可。
    正解是用 (trie) 树维护儿子集合的异或和,利用的大概就是 (x oplus x+1=2^{zerobit(x)}-1) 这个性质。
    从低位到高位建这棵树,然后每次只要交换左右儿子,递归考虑 (x) 的这一位仍然是 (1) 就好了。

    C. 多项式
    设前 (n) 项的的权值总和为 (x),考虑后 (m-n) 项。
    为了方便计算,新加一项来将至多为 (S) 转化为恰好为 (S),可以得到方案数 (inom{S-x}{m-n})
    然后用第一类斯特林数通常幂展开下降幂,来把这个组合数展开。
    接着用二项式定理把 ((S-x)^i) 展开成 (x^i) 的形式,然后对于前 (n) 项,可以直接用二项式定理倍增求出 (x^i) 的总和。

  • 相关阅读:
    Python pandas 入门 05 JSON
    Python matplotlib 画图入门 07 散点图
    Python matplotlib 画图入门 06 绘制多图
    Python pandas 入门 04 CSV 文件
    Python pandas 入门 01 安装
    Python 入门示例系列 35 迭代器与生成器
    Python matplotlib 画图入门 03 绘图线
    Python pandas 入门 目录
    Python 零散知识点琐碎知识
    Python numpy 入门系列 目录
  • 原文地址:https://www.cnblogs.com/skyh/p/12891803.html
Copyright © 2020-2023  润新知