2025Dec.居家集训游记
在家集训也能叫游记吗?
总所周知每一个OIer都爱写这东西(欸我CSP-S游记还没写),所以在家集训也要写。
DAY1 11.8
有点忘了,游记是9号写的。
好像不安了一天,因为我太菜了,也有点想学校里的朋友。
学习了 kruskal 重构树,它满足二叉堆的性质,可以做让最小边权最大(降序排边),让最大边权最小(升序排边)的问题
重构树+最短路,在重构树上倍增找到海拔最低的不会被淹的虚点,其子树就是能坐车到的所有点,然后输出子树里的最短路。
这题的“其子树就是能坐车到的所有点”利用了二叉堆性质,即根节点和子节点一定成偏序关系,很有价值。
多组询问+多测的图论题最出生了,硬调2.5h。
DAY 11.9
回学校取了趟书,同学们真好呜呜呜。
今天是数论。
所以是求\(n^2\)的因数对个数。
直接算\(O(n)\)超时,对\(n\)进行质因数分解,\(n=\sum_{i=1}^{k}p_i^{e_i}\),那么\(n^2=\sum_{i=1}^{k}p_i^{2e_i}\),每个质因数都有选\(0-2e_i\)共\(2e_i+1\)种选择,可以看出来这样是不会重复的,因此因数个数为\(\prod_{i=1}^{k}(2e_i+1)\),结合超过\(\sqrt{n}\)的质因数最多只有一个的性质,时间复杂度\(O(\sqrt{n})\),因数肯定是首位配对,又因为\(n^2\)一定为完全平方数,中间会有个多出来的,因此答案为\(\frac{\prod_{i=1}^{k}(2e_i+1)}{2}+1\)。
和上面的题一样,问题在于求每个质数在\(n!\)的质因子里出现了多少次。
GH大神使用了下面的公式(勒让德定理),其中\(e_p\)为质数\(p\)在\(n!\)质因子里出现的个数。
然而其实对\(1-n\)暴力质因数分解可以直接卡过去
然后我忘了区间筛怎么写了,欧拉函数递推公式看一遍忘一遍。
注意到\(lcm(1,2,3,\dots,n)\)等价于\(\prod_{i=1}^{k}p_i^{e_i}\),其中\(e_i=\lfloor\log_{p_i}n\rfloor\)。
居然被我切了,那确实水
这个题的模数是\(10^8+7\),是的这也是个质数,被坑了,出题人想干啥
首先,神人结论,\(F[n]\)为斐波那契数列第\(n\)项,假定\(n<m\):
GH大神:

???孩子们是结论大赛我们没救了
设\(F[n]=a,F[n+1]=b,F[n+2]=a+b,F[n+3]=a+2b,F[n+4]=2a+3b\dots\)
欸,这可以看出来\(a\)和\(b\)的系数其实也是个斐波那契数列。(注意力惊人)
则\(F[m]=F[m-n-1]a+F[m-n]b\),即\(F[m]=F[m-n-1]·F[n]+F[m-n]·F[n+1]\)。
带入原式
引理(???):
证明:
那么原式就又可以简化为\(\gcd(F[n],F[m])=\gcd(F[n],F[m-n])\)了。
再令\(m'=m-n\),就可以继续递归,得到\(\gcd(F[n],F[m])=\gcd(F[n],F[m\mod n])\)。
由于\(m\mod n<n\),可以再令\(n'=m\mod n,m'=n\),得到
再次注意到\(n,m\)的交替实际上是在求\(n'=\gcd(n,m)\),最后剩下的就是\(\gcd(F[n'],0)=F[\gcd(n,m)]\),证毕。
天哪每一步都是惊人的注意力吗。
浅色调dalao也太强了。
欸不是模数\(10^8\)我怎么又被坑了。
值得一提的是,同机房LZC大佬也遇到了个模数为\(998442353\)的题。
已完成今日模数不只有\(998244353\)和\(10^9+7\)大学习
DAY3 11.10
上午继续做数学。
矩阵递推挺好玩的,可以发现平方和可以从平方递推,\(a_i^2=a_{i-1}^2+2xya_{i-1}a_{i-2}+a_{i-2}^2\),拆\(2xya_{i-1}a_{i-2}=a_{i-2}(xa_{i-2}+ya_{i-3})=xa_{i-2}^2+ya_{i-2}a_{i-3}\),这些都是上一个矩阵有的,满足递推关系。
本来以为是硬拆找规律,想起了24年暑假集训模拟赛场上耗费2h暴力拆式子推出来的T4。
取最小正整数,所以通解取模的时候如果为0返回的应该是模数。
我以为我公式错了耗了半天,服了。
易证
一步转化,后面的就很简单了
欸不是我怎么想不到这个的啊
下午模拟赛
70+50+0+40=160
T2输出0拿了四十???出题人数据用脚做的吗??
T3倍增的部分分没写完
T4开long long可以再拿10pts
GH大蛇330pts%%%
T1
显然选这个硬币的次数要小于\(\frac{a_{i+1}}{a_i}\),把原题看成进制,相当于至少多少次询问才能使所有位至少在两次询问中不同,
若进制不一样,取最大的ans。
显然对于n位k进制数,它最多能构造\(n^k-1\)个有效数字(0没意义),那么答案即为
其中\(b_i\)为\(\frac{a_i+1}{a_i}\),时间复杂度\(O(n\log n)\),瓶颈在对\(b_i\)排序或\(\log\)函数。
T2
通用套路:把坐标系转\(45°\),新坐标\((u,v)=(x+y,x-y)\),原坐标移动变为\((u\pm 1,v\mp 1)\),这样无论向哪个方向走两坐标都会有变化,移动范围\((u\pm m,v\mp m)\),\(u,v\)独立,降维,下面就可以只考虑一维的方案数再乘起来。
首先所有狼的任意一维坐标差必须是偶数,即奇偶性相同,要不然不可能汇于一点。
以\(u\)为例,设终点\(u\)坐标为\(k\),范围\(u-m\leq k\leq u+m\),可以直接枚举,考虑路径组合公式。
对于狼\(i\),位移\(\Delta x=k-u_i\),多出来的\(m-(k-u_i)\)是正负方向抵消的,所以正方向移动了\(k-u_i+\frac{m-(k-u_i)}{2}=\frac{m+k-u_i}{2}\)步,负方向移动了\(\frac{m-k+u_i}{2}\)步,把正方向看做黑球,负方向看做白球,方案数为\(\binom{m}{\frac{m-k+u_i}{2}}\)。预处理阶乘和阶乘逆元可以\(O(1)\)计算,所以答案为:
其中\(u_{min}-m\leq k\leq u_{max}+m\),k的枚举步长为2(小数取组合数没意义),时间复杂度\(O(n(V+m))\),\(V=u_{max}-u_{min}\),可以通过本题。
不过GH大佬对此进行了优化(因为他以为这个复杂度过不掉)

没听懂怎么优化的,反正\(O(n(V+m))->O(nm)\),然而区别不大(
T3
https://www.luogu.com.cn/problem/P11340
到底是谁在会这种东西??????
把每个人的最高和最低排名当成线段堆在数轴上,如果某个位置不被任何线段跨过,将数轴划分段,每一段都是个SCC(神秘结论),所以想去第一的充要条件是在第一个块内。
线段树维护每个线段(左闭右开),进行线段树二分,维护区间最小值以找到第一个0即可(如果不左闭右开无法区分线段,找不到0)。
T4
不补了,什么玩意,超长数论推式子。
Day4 11.11
其实上午还在补昨天的题
图论
我以为是边双,原来要分别建单向边吗
匈牙利板子是不是可以过
我写了个假做法,被LZC一眼hack掉了,结果居然AC了???
https://www.luogu.com.cn/discuss/1195935
正解是tarjan小技巧,感觉挺有价值
P2865 [USACO06NOV] Roadblocks G
已完成今日次短路模板大学习
今天怎么啥也没干,明天学学dinic板子

浙公网安备 33010602011771号