20230220模拟赛题解
Algebra Problem - P9007
虽然题名叫 algebra 但这实际是个数论题。
由 \(z|y,z|x-y\) 得 \(z|x,z|y\),于是设 \(x=pz,y=qz\ (p,q\in \Z)\)。
带入进去可以发现
,发现每个 \(p\) 一定对应唯一的 \(q\),且合法 \(p\) 的个数就是 \((n-1)(n-1)!\) 的因子数,预处理 \(n!\) 因子数然后每次把 \(n-1\) 分解质因数后算乘上之后因子数的变化即可。
Basic Problem - CF704B
先简化一下权值的函数,令 \(a_i=a_i+x_i,b_i=b_i-x_i,c_i=x_i+x_i,d_i=d_i-x_i\),于是有
,然后是一个经典的 trick,\(f_{i,j}\) 表示从小到大放前 \(i\) 个数,组成 \(j\) 个连通块的最小权值。每次新加进来一个数,可以让它单成一段,接在之前一段的尾或头,或是连接两段。最后强制只分一段即可。
Constructive Problem - CF1391E
首先求出这个图的 dfs 生成树,如果这棵树最大深度大于等于 \(\left\lceil\frac{n}{2}\right\rceil\),那直接找最深的点到根的路径即可。考虑剩下的情况,知道无向图 dfs 生成树有一个性质:两点在原图上有边仅当在 dfs 生成树上是祖孙关系。于是发现取同一层的两个点对必然合法,因为原图上没有边,取不同层的两个同层点对同样合法,因为原图上最多有 \(2\) 条边。于是每一层尽可能多的取点对,每层最多浪费 \(1\) 个点,算下来浪费的不超过 \(\left\lceil\frac{n}{2}\right\rceil\),因此剩下的点数一定大于等于 \(\left\lceil\frac{n}{2}\right\rceil\)。
Difficult Problem - CF717A
设 \(g_i\) 为长度为 \(i\) 的合法串数,发现如果 \(i\) 这位放 \(1\),\(i-1\) 可以放 \(0\) 或 \(1\),此时有 \(g_i+=g_{i-1}\),如果 \(i\) 这位放 \(0\),\(i-1\) 就只能放 \(1\),此时有 \(g_i+=g_{i-2}\)。容易发现长度为 \(1\) 时,放什么都可以,因此 \(g\) 为首项为 \(2\) 的斐波那契数列。设 \(\{f_i\}\) 为斐波那契数列,答案即为
不妨让 \(l,r\) 加上 \(2\),就可以开始推柿子了。
下降幂多项式转普通多项式得到
考虑用通项公式替代 \(f_i\),由二阶线性递推的特征方程得到
,带入得
,二项式定理展开得
,可以枚举 \(j,t\),容易发现后面的部分是一个等比数列求和,套公式即可。
但是还有一个问题,\(5\) 在模 \(10^9+7\) 意义下没有二次剩余,于是扩域,把所有数用复数表示即可。
Excellent Problem
如图。