【考试总结】2022-07-29

计算两个都不包含圆心的方案和一个不包含一个任意的方案。

包含圆心等价于凸包上两个相邻的点之间的距离 L2 。枚举 1n 中某个点并让其作为长度 >L2 线段的端点。在线段上的点只能选另一个颜色,剩下的可以任选,得到点数之后可以快速幂

对于后半部分,枚举两个相邻异色点作为断环成链的两个端点。从左端点右端点分别延伸出长度为 L2 的线段,有交则中间部分快速幂。但是这会算重,不过重复的情况都存在分界线,方案数减去分界线数量即可

分治,将 >mid 的数字视为 1,否则视为 0。那么每一层的目标就是将所有 1 翻到 0 右边

将连续的 0/1 缩成一个,再将每对 01 视作一段进行一次操作,操作过后再将连续 0/1 缩起来,段数减半。那么操作次数是 Θ(log) 级别

当区间不为 [1,n] 时可以并行处理,于是每层操作 Θ(log) 次,一共 Θ(log) 层,由于层数增加时区间长度减小,于是实际上附带了 12 的常数

对于可能因为翻转产生的 1 实际上在 0 右边的情况可以在输出答案的时候将操作序列 D1,Dk 翻转。

实现每层的处理时不必拘泥于模拟上面所说,可以再进行一次分治,每个区间返回区间内 1 的数量并将区间里面的 0 翻到 1 的左侧,合并两个区间只需要翻转 0101 中间的一对

定义乘法为狄利克雷卷积,并令 p(x)=[i,ai|x] 于是可以得到根权值为 n 的树的数量 f(n) 的转移表达式

f=p+t2ft

注意到非叶子节点本身没有权值,于是可以做些简单和式变换得到:

f=f2+p1+p

整道题的答案就是 f 前缀和的第 n 项,尝试使用定义式 i=1n(f2+p)S(i)(1+p)S1(ni) 来求,左式的 fS(i) 表示前缀和第 i 项。

pS(n) 可以通过 2m 的 Venn 图容斥来求一项,注意每个集合的倍数数量的整除除数是集合元素 LCM

对于 (1+p)S1 使用标准杜教筛来处理,因为 (1+p)1(1+p)=ϵ 。根据定义式这都是成立的,即使 1+p 并不是传统意义上的积性函数。不过给 p 附加常数项好像并没有对指数上的运算产生任何影响,我不是很理解。

对于 fS2(n) 也是用 i=1nfS(i)fS(ni) 来做,乍一看出现了环形转移,但是 ai2fS(1)=0 所以不必担心。

按照定义式 Θ(nlogn) 求出来上述函数的前缀和,其中狄利克雷卷积的逆运算表达式为 g(n)=ϵ(n)d|nd1f(d)g(nd)f(1)

时间复杂度 Θ((nlogn)23)

posted @   没学完四大礼包不改名  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示