Volume 12
551. Sum of digits sequence
令表示
的数位和, 考虑
, 那么只要
, 其实
, 其中
.
不妨令表示从
开始, 根据递推式
, 直到
的最小
, 以及当前
的值(
的值是一个pair).
的转移比较容易, 考虑枚举
当前最高位的数字
, 那么可以从
转移过来, 具体来说
,
. 初始边界值是
.
知道了数组之后, 我们显然就可以通过从高到低依次枚举
的每一位来确定
.
552. Chinese leftovers II
这个题实际上就是要求. 令
为前
个素数的乘积, 那么有下面一个同余方程:
不妨令, 那么可以得到
.
那么假设我们得到了的值, 显然就可以递推出
的值了. 由于
以内只有
个素数, 于是可以直接
暴力更新.
553. Power sets of power sets
令表示选出来集合的并恰好有
种不同数字, 且分成了
个连通分量的方案数. 显然
. 考虑如何计算
, 一个显然的递推式就是
, 表示单独拿出来一个大小为
的联通块, 为了不重复计数, 这个联通块必须包含最小的数. 剩下的问题就是如何计算
了.
令表示选出若干集合, 他们的并是全集
的方案数, 这个打了下表可以知道就是A003465, 于是
. 知道了
以后,
的式子就显而易见了
.
这样我们就有了一个的算法, 滚动数组一下很快就跑出来了. 但是这题还可以用生成函数做的更好.
令, 定义三个生成函数
,
和
:
那么, 我们可以知道的生成函数是:
其中.
于是用FFT/NTT就可以在的复杂度解决了.
554. Centaurs on a chess board
可以考虑下题目中的是如何得到的. 考虑把
的棋盘以
为单位划分成
, 那么显然任意一个
的小块最多只能包含一个centaur. 于是一个
的棋盘最多只能放
个centaur. 然后通过简单的推导可以知道
. 然后用lucas定理计算
即可.
555. McCarthy 91 function
和之前的#340 Crazy Function一样, 可以知道这个东西是一个分段函数. 打个表就可以发现以
为周期, 每个周期内是一个公差为
的等差数列, 最高项是
. 于是找不动点其实就是找一个区间
, 使得
, 化简下得到
. 于是只要枚举
, 然后再枚举
就可以解出
. 求出区间后就是一个等差数列求和的问题.
556. Squarefree Gaussian Integers
可以回想起#193的公式, 这个题稍微改下那个公式就好了: . 其中
表示有多少proper Gaussian integer
满足
. 至于
看着参考这个数列A120630.
557. Cutting triangles
根据梅涅劳斯定理, 可以得到, 枚举
以及
, 然后就可以计算出
了.
558. Irrational base
这个题的方法有很多.
方法一
注意到是数列
的特征方程. 我们知道有个Zeckendorf's theorem, 可以用Fibonacci数表示一个整数. 我们还知道有个Golden ratio base, 可以用base-
来表示一个整数. 事实上base-
和Fibonacci-base是可以对应的. 于是猜测可以用
来代替
. 为了处理出
, 可以把
一开始乘上一个较大的
, 然后贪心做, 从打到小依次减过去, 当然需要保证相邻两项差大于等于
. 这个算法的解释可以在论坛中看到, 这个以及这个.
方法二
显然可以得到, 于是每个
其实都可以用
来表示. 然后可以发现
当且仅当它的范数小于
. 于是, 我们有了比较两个数大小的手段, 可以算出
的范数是下面这个矩阵的行列式值
方法三
参考Golden ratio base, 我们知道如果当前表示不够优的话, 可以用一些规则来使得这个表示变得更优. 首先我们知道, 也就是说如果知道了
的表示, 以及
的表示, 直接相加可以得到一个
的表示, 而
的表示可以由
的表示得到.
考虑这几个式子, 我们可以根据这三个式子来优化一个不是最优的式子. 于是只要知道
和
的表示, 理论上就可以求出其他所有的表示.
的表示为
.
559. Permuted Matrices
will publish soon.
560. Coprime Nim
打表观察可知如果是偶数那么
, 如果
是质数或者
那么
, 否则
其中
是
的最小质因子. 计算出每个
在
中出现的次数
, 然后就是对
做
次异或卷积, 用
fwt
就好了.
561. Divisor Pairs
首先可以知道. 当
的形式是
时,
, 由于
是奇数, 只有
会对答案有贡献. 当
的形式是
时,
, 令
,
, 那么
是奇数, 于是只有
会对答案有贡献. 当
形式为
或者
时,
是奇数, 不会对答案有任何贡献.
于是, 当时,
; 当
时,
. 其中
表示
的二进制表示中末尾
的个数. 于是,
562. Maximal perimeter
首先根据pick定理, 可以知道这个三角形的面积必然是. 不妨假设
, 那么显然有
. 也就是说如果知道了
, 可以用扩展欧几里得算法求出
. 考虑到
点肯定和圆周非常接近, 于是可以考虑直接暴力枚举
.
563. Robot Welders
可以猜测每个数的最大质因子不会超过, 就是
. 于是可以dfs生成所有在
以内的数, 暴力枚举约数就好了. 也可以考虑枚举最长边, 显然不会超过
, 然后根据
的限制枚举短边, 这个应该会快很多.
564. Maximal polygons
假设我们已经知道了多边形的每条边长, 那么面积最大的多边形显然一定是圆的内接多边形(称作Cyclic Polygon). 这个圆可以通过二分计算出来.
于是可以暴力枚举变长和为的所有多边形, 然后计算贡献. 枚举的时候需要按照边长度递增或递减枚举, 边长度集合一样的多边形一起计算就好了.
565. Divisibility of sum of divisors
will publish soon.
566. Cake Icing Puzzle
will publish soon.
567. Reciprocal games I
will publish soon.
568. Reciprocal games II
will publish soon.
569. Prime Mountain Range
will publish soon.
570. Snowflakes
will publish soon.
571. Super Pandigital Numbers
will publish soon.
572. Idempotent matrices
will publish soon.
573. Unfair race
will publish soon.
574. Verifying Primes
will publish soon.