CF1549

Codeforces Round #736 (Div. 2)

D. Integers Have Friends

题意

给定一个正整数数列 {an}\{a_n\},它的连续子数列为 alara_l\ldots a_r

求一个最长的连续子数列,m2\exists m\geqslant 2,使 alal+1ar(modm)a_l\equiv a_{l+1}\equiv \ldots \equiv a_{r} \pmod{m},也就是它们在模 mm 的意义下同余

n2105,ai1018n \leqslant 2\cdot 10^5, a_i \leqslant 10^{18}

思路

可以从同余的定义上思考,ab(modm)    m(ab)a\equiv b\pmod{m} \iff m|(a-b)

于是我们就可以写出上面同余式的等价式:m(alal+1),,m(arar1)m2m|(a_l-a_{l+1}),\ldots,m|(a_r-a_{r-1})\quad m\geqslant 2

进一步有:mgcd(alal+1,,arar1)m2m | gcd(a_l-a_{l+1}, \ldots, a_r-a_{r-1})\quad m\geqslant 2

我们可以将 mm 直接取成它们的最大公约数

则当 gcd(alal+1,,arar1)2gcd(a_l-a_{l+1}, \ldots, a_r-a_{r-1}) \geqslant 2 时,一定存在 mm 满足题意

bn=anan1b_n=|a_n-a_{n_1}|,下面讨论针对数列 {bn}\{b_n\} 进行

那么问题转换为查找一个最长区间,使得这个区间的数的最大公约数大于等于 22

我们可以想想如何快速求解一个区间的最小公约数,类比求区间最小值

我们发现一个区间的最小公约数也是具有可拆分性的,
也就是说 gcd(a1,a2,a3,a4)=gcd(gcd(a1,a2),gcd(a3,a4))gcd(a_1,a_2,a_3,a_4)=gcd(gcd(a_1,a_2),gcd(a_3,a_4))
于是可以利用线段树,ST表O(logN)O(logN) 下求解任意区间的 gcdgcd

那么我们就可以直接枚举左端点 ii,然后二分最大区间长度 lenlen,使 [i,i+len1][i,i+len-1] 中的数 gcd2gcd\geqslant 2
答案就是全局最大的区间长度

如果是线段树实现chk函数:时间复杂度 O(Nlog2N)O(Nlog^2N),二分复杂度一个 loglog,chk函数又一个 loglog

如果是ST表实现chk函数:时间复杂度 O(NlogN+Nlog1018)O(NlogN+Nlog10^{18}),第一项是二分的复杂度,后一项是预处理ST表的复杂度

下面代码我是用ST表实现的

E. The Three Little Pigs

题意

给定 n(1n106)n (1\leqslant n \leqslant 10^6) ,有 Q(1Q2105)Q (1 \leqslant Q \leqslant 2\cdot 10^5) 次询问

每次询问给出一个 x(1x3n)x (1\leqslant x \leqslant 3n),对于每个 xx 求解i=0n(3ix)\sum_{i=0}^{n} \binom{3i}{x}的值

注:默认当 n<mn < m 时,(nm)=0\binom{n}{m} = 0

思路

法一

由于 i=0n(3ix)\sum_{i=0}^{n} \binom{3i}{x}3i3i 是间断的,所以我们考虑先把它补全,以充满 [0,3n)[0,3n) 整个区间,这里补全的技巧很高,通过模 33 的最小剩余系中的元素将它补全

f(x,m)=i=0n1(3i+mx)0m2f(x, m)=\sum_{i=0}^{n-1} \binom{3i+m}{x}\quad 0\leqslant m\leqslant 2

那么对于询问 xxans(x)=f(x,0)+(3nx)ans(x) = f(x,0) + \binom{3n}{x}

则有第一个方程:

f(x,0)+f(x,1)+f(x,2)=i=03n1(ix)=(3nx+1)f(x,0)+f(x,1)+f(x,2)=\sum_{i=0}^{3n-1}\binom{i}{x}=\binom{3n}{x+1}

这里使用了曲棍球恒等式(Hockey Stick Identity),由于这个数字选择在杨辉三角中的形状像一个曲棍球,也应此得名

Hockey Stick Identity:nr,i=rn(ir)=(n+1r+1)\text{Hockey Stick Identity:}\quad n\geqslant r, \sum_{i=r}^{n}\binom{i}{r}=\binom{n+1}{r+1}\\

然后我们又可以通过二项式递推式 (nm)=(n1m)+(n1m1)\binom{n}{m} = \binom{n-1}{m}+\binom{n-1}{m-1} 得到另外两个方程:

f(x,1)=f(x,0)+f(x1,0)f(x,2)=f(x,1)+f(x1,1)f(x,1)=f(x,0)+f(x-1, 0)\\ f(x,2)=f(x,1)+f(x-1, 1)

通过这三个方程组的联立,解得

{f(x,0)=13((3nx+1)2f(x1,0)f(x1,1))f(x,1)=f(x,0)+f(x1,0)f(x,2)=f(x,1)+f(x1,1)\begin{cases} f(x,0)=\frac{1}{3}\cdot (\binom{3n}{x+1}-2f(x-1,0)-f(x-1,1))\\ f(x,1)=f(x,0)+f(x-1,0)\\ f(x,2)=f(x,1)+f(x-1,1) \end{cases}

于是就可以愉快的递推了

注意:一定要 O(n)O(n) 预处理组合数,313^{-1} 也要预处理,不然 log2109=29\left\lfloor log_210^9\right\rfloor=29 这个常数可不小

O(n)O(n) 预处理方法可以见代码
大致思路是先求 1!n!1!\ldots n!,再求 (n!)1(n!)^{-1},最后通过 ((n1)!)1=(n!)1n((n-1)!)^{-1}=(n!)^{-1}\cdot n 线性求出每个阶乘的逆元

总复杂度 O(6N+Q)O(6N+Q)

法二

利用多项式系数,直接构造答案

令多项式 P(k)=(1+k)3+(1+k)6++(1+k)3nP(k) = (1+k)^3 + (1+k)^6 + \ldots + (1+k)^{3n}

那么对于询问 xxans(x)ans(x) 就是 kxk^x 的系数

问题转换为解救 P(k)P(k) 多项式,如果用FFT还是会超时,再观察可以看出来它是一个等比数列求和

利用等比数列求和公式,先消去常数项,然后上下项同时除以 kk,得

P(k)=(1+k)3n+3(1+k)3(1+k)31=k3n+3++(3n+3)kk33k23kk3+3k2+3k=k3n+2++(3n+3)k23k3k2+3k+3\begin{aligned} P(k) &= \frac{(1+k)^{3n+3} - (1+k)^3}{(1+k)^3-1}\\ &= \frac{k^{3n+3}+\ldots+(3n+3)k-k^3-3k^2-3k}{k^3+3k^2+3k} \\ &= \frac{k^{3n+2}+\ldots+(3n+3)-k^2-3k-3}{k^2+3k+3} \end{aligned}

那么问题转换为:多项式长除法,直接模拟这个过程即可,同样需要预处理组合数,降低复杂度

时间复杂度 O(3N+Q)O(3N+Q)

F1. Gregor and the Odd Cows (Easy)

题意

给出 nn 个栅栏柱,每个栅栏柱的坐标都是整数并且保证是偶数,三个栅栏柱可以围成一个封闭三角形,被封闭三角形所包围的节点数为奇数个,并且要求三角形的面积为整数,求一共有多少种这样的三角形。

前置芝士

Pick定理

在网格图上的简单多边形的面积 SS 有如下公式

S=a+b21S = a+\frac{b}{2}-1

其中,aa 为网格中在多边形内部的节点数,bb 为多边形边上的格点数

Pick's theorem

证明:维基百科 Pick’s theorem

Shoelace公式 (鞋带公式)

令简单多边形的顶点坐标分别为 (xi,yi)i=1n(x_i,y_i)\quad i=1\ldots n

则,该简单多边形的面积为:

S=12i=1ndet(xiyixi+1yi+1)=12i=1nxiyi+1xi+1yixn+1=x1,yn+1=y1S=\frac{1}{2}\begin{vmatrix}\sum\limits_{i=1}^{n}det\begin{pmatrix}x_i&y_i\\x_{i+1}&y_{i+1}\end{pmatrix}\end{vmatrix}=\frac{1}{2}\begin{vmatrix}\sum\limits_{i=1}^nx_iy_{i+1}-x_{i+1}y_i\end{vmatrix}\\ x_{n+1}=x_1,y_{n+1}=y_1

这个我是用外积理解的(内部的行列式),具体证明:维基百科 Shoelace formula

它就像的计算关系就像“系鞋带”一样

Shoelace formula

思路

如果没有Pick定理真的一点思路都没有

由于题目保证了坐标都是偶数,则由Shoelace公式(外积求三角形面积)知,三角形的面积一定是整数,并且是偶数

题目又要求内部点的个数为奇数,再通过Pick定理 S=a+b21=a1+b2S=a+\frac{b}{2}-1=a-1+\frac{b}{2},则 aa 为奇数,故 a1a-1 为偶数

进一步有:2(S(a1))=b    b0(mod4)2(S-(a-1))=b \iff b\equiv 0\pmod{4}

于是问题就转换为求解三角形的边上格点数目为4的倍数

我们考虑 ABAB 这条边,A(x1,y1),B(x2,y2)A(x_1,y_1),B(x_2,y_2)
则这条边上的格点数目一定为 gcd(x1x2,y1y2)+1gcd(|x_1-x_2|,|y_1-y_2|)+1,可以通过画简单的示意图得出

b=i=13(gcd(xixi+1,yiyi+1)+1)3=i=13gcd(xixi+1,yiyi+1)0(mod4)x4=x1,y4=y1\begin{aligned} b&=\sum\limits_{i=1}^3(gcd(|x_i-x_{i+1}|, |y_i-y_{i+1}|)+1)-3\\ &=\sum\limits_{i=1}^3gcd(|x_i-x_{i+1}|, |y_i-y_{i+1}|)\equiv 0\pmod{4} \end{aligned}\\ x_4=x_1,y_4=y_1

于是,问题可以转换为mod4\mod 4 意义下,将所有的 x,yx, y 坐标都对4取模,然后求满足上式的方案数

又由于 x,yx,y 都是偶数,所以 x,y0 or 2(mod4)x,y\equiv 0\ or\ 2\pmod4

所以模4意义下的坐标一共也就4种,可以直接枚举出3个坐标,然后判断是否满足上式,统计答案,就OK了

时间复杂度 O(N+43)O(N+4^3)


CF1549
https://wty-yy.github.io/posts/7247/
作者
wty
发布于
2021年8月2日
许可协议