2018.3.12校内互测总结-生成函数-bitset-二次剩余
这套题是同机房dalao Easy 出的,质量还是挺高的~
T1.a
题目大意:
定义运算$r(n,S)$为满足$s_1 \in S,s_2 \in S,s_1 \neq 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 的博客
然而还是不会写,留坑待填_(:з」∠)_