2020.3.22解题报告
说实话,听完老师的讲解,我觉得这次的考试并没有这么难。但在考试的时候为什么就没想出来呢?(我太弱了)。
为了让老师有更好的体验,我还特意学了Markdown。
T1 神炎皇
听讲解,知道这题是数学题,要用线性筛求\(\phi()\)
考场上只想出了暴力……
好吧,讲一下正确的思路:
设数对\((a,b)\),\(d=gcd(a,b)\),
\(a'=\frac{a}{d}\),\(b'=\frac{b}{d}\)。
我们要满足\((a+b)|ab\),也就是要满足 \((a'+b')d|(a'b')d^2\)
则我们可以得到\((a'+b')|(a'b')d\)。
又\(\because gcd(a',b')=1\),\((a'+b',a')=(a'+b',b')=1\),\(\therefore gcd(a'+b',a'b')=1\)。
也就是\((a'+b')\)不是\(a'b'\)的因子,是\(d\)的因子,就是求\((a'+b')|d\)。
再设\(m=(a'+b'),d=km\),则\(km^2\leqslant n\)。
\(m\)只用枚举到\(\sqrt{n}\)。
对于每一个\(m\),\(k\)有\(\phi(i)\)种
T2降雷皇
令以第n个数结尾的LIS长度为fi,易得\(f_i=max{f_j+1}\)。
本来需要遍历每一个j,可是发现树状数组可以维护满足结合律的操作(如区间和,区间积,区间异或,区间最值等),复杂度可以降到\(O(logn)\),于是总复杂度为\(O(nlogn)\)。
如何算LIS个数?设g[i]为长度为f[i]的LIS的方案数,有:
\(g_i=max(1,∑g_i)\)
可以用树状数组维护一下。
T3幻魔皇(参考题解的思路想出来的)
设\(f_i\)是根节点为白色距离根节点为i的白点个数;
设\(b_i\)是根节点为白色距离根节点为i的黑点个数;
设\(a_i\)是根节点为黑色距离根节点为i的白点个数.
画图可知有\(a_i\)为斐波那契数列。
\(f_i\)=\(b_{i-1}\),\(b_i\)=\(b_{i-1}\)+\(f_{i-1}\)
对白LCA,枚举距离i
有\(ans_i\)=\(f_i∑f_j\)
对黑LCA,还是枚举距离i,
找它的两个儿子来统计,
枚举其中一个儿子的长度为k。
ansi=∑k=1i fk−1×ai−k−2∑j=1n−1−max(k−1,i−k−1)bj(太难打出来了QWQ,Markdown太难用了)

浙公网安备 33010602011771号