2018.3.12校内互测总结-生成函数-bitset-二次剩余

这套题是同机房dalao Easy 出的,质量还是挺高的~

T1.a

题目大意:

定义运算$r(n,S)$为满足$s_1 in S,s_2 in S,s_1 eq s_2,s_1+s_2=n$的有序对$s_1,s_2$的数量

将集合$S_n={0 cdots n}$划分成两个集合$S_a,S_b$,使得对于任意的$a(1 leq a leq n)$,均有$r(a,S_a)=r(b,S_b)$。

$3 leq n leq 10^5$。

题解:

作为一条咸鱼,当时咱用$O(n^2)$暴力打了个表,然后把表差分后用char压缩了一下,把代码长度压到了12kb,然后就过了......

这道题事实上是一道数学竞赛组友情赞助的构造题,然而从机房dalao Demerzel那里get到了一个很好的方法:

设$S_a$的生成函数为$A(x)$,$S_b$的生成函数为$B(x)$,某项的系数为$1$代表这个数在当前生成函数内。

那么现在得到了一个方程组:

已知

$$A(x)+B(x)=frac{x^{n+1}-1}{x-1}$$

求$A(x)$,$B(x)$满足

$$A2(x)-A(x2) equiv B2(x)-B(x2) pmod{ x^{n+1}}$$

考虑到是在$mod x^{n+1}$意义下运算,那么事实上:

$$A(x)+B(x) equiv frac{1}{1-x} pmod{x^{n+1}}$$

然后对第二条方程进行转化:

$$A2(x)-B2(x) equiv A(x2)-B(x2)$$

$$(A-B)(x)(A+B)(x) equiv (A-B)(x^2)$$

考虑令$C(x)=(A-B)(x)$

那么$C(x)$的每一项系数均为$pm 1$,$+1$为在$S_a$中,否则在$S_b$中。

带入第一条方程的结果:

$$frac{1}{1-x}C(x) equiv C(x^2)$$

$$C(x) equiv C(x2)-xC(x2)$$

考虑到$C(x2)$即$C(x)$所有系数的下标*2的结果,同时$xC(x2)$为$C(x^2)$所有系数的下标$+1$的结果,那么令$C_i$为$C(x)$在次数为$i$的一项上的系数,那么这个式子写成竖式会是这样的:

   C0 0  C1 0  C2
-  0  C0 0  C1 0
------------------  ......
   C0 C1 C2 C3 C4

观察这个竖式,由于已知$C_0=1$,那么现在咱们可以递推解出每一项了。

复杂度$O(n)$。虽然都是基本操作但还是很巧妙的。

T2.b

题目大意:

在一个三维空间内,实现加点、求指定空间内点的个数两个操作。

操作数$n$满足$1 leq n leq 5*10^4$。

题解:

会写KD-Tree的博主由于太久没写过,选择了做一条咸鱼,写了CDQ分治套树套树_(:з」∠)_

然而事实上有一种$O(frac{n^2}{omega})$的神奇做法:

考虑对每个询问点维护一个bitset,每一位按时间顺序从前到后依次代表一个点。

初始比当前点加入时间早的所有点的位置上均为$1$,其余位置为$0$。

依次操作每一维,对于每一维,同样开一个bitset,初始全$0$。

将所有节点按这一维坐标的大小排序,并按顺序加入每个点,若是询问则在对应的答案bitset上and当前维护的bitset。

最后每一个询问点的bitset上的count便是对应点的偏序,容斥一下便可得到答案~

实际时间效率完虐除了三维KD-Tree外的所有方法,包括CDQ套CDQ、CDQ套二维KD-Tree等。

T3.c

题目大意:

给出$c$和质数$m$,求方程$x^2-c equiv 0 pmod{m}$的解。

题解:

裸二次剩余。

然而咱不会_(:з」∠)_

这有一篇非常好的博客,讲的很清楚:a_crazy_czy dalao 的博客

然而还是不会写,留坑待填_(:з」∠)_

原文地址:https://www.cnblogs.com/zltttt/p/8553029.html