tg 91 solution
T1
首先对于每种颜色,
找出所有灯同时亮这种颜色的最小时间,
直接加上一个最小正周期就是所有灯亮同一种颜色的时间了
然后你可以把每种颜色对应的同时亮的时间\(t\)写成线性同余方程组的形式
模数是每个灯的周期,余数是这个颜色在这个循环的位置
然后exCRT
解一下就没了,模不一定互质嗷
记得特判无解
后续过程还要计算这个灯对答案贡献
考虑差分,算\([0,r]\)减掉\([0,l-1]\)
记最小正周期\(T\),其实就是所有模数的最小公倍数
\([0,r]\)所有时刻就是\(\lfloor\frac{r}{T}\rfloor+[t\leq r\bmod T],\)
后面那个是艾佛森括号,就是bool
变量的意思
不知道我是在什么样的精神状态下认为这个东西是\(O(n^2)\)的
T2
单算一个质数,然后乘法原理合并
考虑对每个数先除掉\(x\)
记当前质数为\(p_i\),\(now=b_i-a_i\)
则考虑选的范围就是\([0,now],\)并且\(\exist i\in[1,n],i=0 \& \exist i\in[1,n],i=now\)
直接数不太好数,考虑容斥
我们首先让每个数任意,当做全集\(S\),
每个数有\(|[0,now]|=now+1\)种选择,于是有\(|S|=(now+1)^n\)
考虑强制不出现\(0\),每个数有\(|[1,now]|=now\)中选择,于是有\(|S_1|=now^n\)
强制不出现\(now\)同理,于是有\(|S_2|=now^n\)
这之中去掉两次\(S_3,\)即在任意选择\([1,now)\)任意选择
考虑再加上这一部分即可,这一部分\(|S_3|=(now-1)^n\)
一个质数的贡献就是\(|S|-|S_1|-|S_2|+|S_3|\),乘一块就没了
T3
发现差分就是组合数
然后就转换成这个东西
\(\sum\limits^{n}_ {i=0}\sum\limits^{m}_ {j=0}\binom{i}{j}\)
后面直接换掉,没看明白右转OI-Wiki
\(\sum\limits^{m}_ {j=0} \binom{n+1}{j+1}\)
下标加个\(1\),同时考虑整洁我们要再来一个\(k=0\)
于是我们就要减掉一个新加的\(\binom{n+1}{0}\)
\(\sum\limits^{m}_ {j=0} \binom{n+1}{j}-1\)
其实这个形式和给的\(f_{n,m}\)很像,我们考虑研究那玩意
\(f_{n,m}=\sum\limits^{m}_ {i=0}\binom{n}{i}\)
考虑到模数不大,先一个Lucas
定理
\(\sum\limits^{m}_ {i=0}\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{i}{p}\rfloor}\binom{n\bmod p}{i\bmod p}\)
按模数和余数分类,后面加的那一项是\(m\)除不尽剩下的
\(\sum\limits^{\lfloor \frac{m}{p}\rfloor -1}_ {i=0}\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{i}{p}\rfloor}\sum\limits^{p-1}_ {j=0}\binom{n\bmod p}{j}+\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\sum\limits^{m\bmod p}_ {i=0}\binom{n\bmod p}{i}\)
然后你发现这一项形式\(\sum\limits^{\lfloor \frac{m}{p}\rfloor -1}_ {i=0}\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{i}{p}\rfloor}\)确实不错,这不就是\(f\)吗,换了
\(f_{\lfloor\frac{n}{p}\rfloor,\lfloor \frac{m}{p}\rfloor -1}\cdot\sum\limits^{p-1}_ {j=0}\binom{n\bmod p}{j}+\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\sum\limits^{m\bmod p}_ {i=0}\binom{n\bmod p}{i}\)
递归求解就好了,时间复杂度其实不大,应该是\(O(p\log_p n)\)这个东西
后面那只\(log\)底数太大所以其实影响不大
T4
首先看出这题期望是假的,分母是好算的
我们只需要算出路径长度和乘个分母就好了
首先拆一个树上差分的式子
然后你会发现确实没那么难算
算每一个\(dp_i\& dp_j\)都好算
\(dp_i\)就直接维护一个比它大的数的数量
\(dp_j\)就直接维护比它大的点所有深度和
其实按照\(a\)降序排序维护前缀和这两个东西就无了
关键是\(lca(i,j)\)
线段树维护一棵初始点权为\(0\)的树,
我们在加入一个点的时候将这个点到根路径上的每个点都加上\(1\),
查询时直接查\(i\)到根路径上的点权和,
与 [LNOI2014]LCA 一题类似。
最后的最后
\(a\)相同的点要一起线段树修改,不要一个一个加!!!