• 省选模拟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) 的总和。

  • 相关阅读:
    Undo/Redo实现
    [CruiseControl]binary安装和启动
    perl读写文件和命令行解析
    C++跨平台IDE之CodeBlocks
    Swig实现多语言接口
    让人梦萦的西安小吃(转载)
    推荐:Visual Basic.NET Windows Forms 编程
    健康生活16个健康习惯
    推荐一个ASP的内容管理框架(ASP Nuke)
    《企业应用架构模式》读书笔记(1)
  • 原文地址:https://www.cnblogs.com/skyh/p/12891803.html
Copyright © 2020-2023  润新知