省选模拟96 题解
A. 多边形
因为本题保证了 n 不为偶数,所以 n 没有 n2 这个循环节。
然后考虑 n3 这个循环节,如果能形成锐角一定有 m=3。
如果存在更小的循环节,那么一定不存在锐角了。
所以尽量特殊处理一下 m=3 这个情况,然后对于 ans0,用全集-补集去求。
对于其他的情况,可以考虑求出循环同构意义下合法的边长排列有多少个,给这个玩意乘 n 就是答案。
这个玩意的求法可以是容斥,大概的思想就是如果存在相邻的两个边长之和 >n+12 那么存在一个锐角。
如果有这个事情,就是说 xi+1≥max。
然后分类讨论这样的 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,可以得到方案数 \binom{S-x}{m-n}。
然后用第一类斯特林数通常幂展开下降幂,来把这个组合数展开。
接着用二项式定理把 (S-x)^i 展开成 x^i 的形式,然后对于前 n 项,可以直接用二项式定理倍增求出 x^i 的总和。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步