天空碎片
首先观察题中那个诡异的条件$n,m<=p*(p-1)$,可以发现,对于一个数x,求出$x\% p$,$x \% (p-1)$,记为$(i,j)$那么每一个$(i,j)$都与一个特定的$x$对应。
因此,我们可以枚举这个$(i,j)$,那么若存在四元组 $x^{y} equiv n^{m} mod p$ ,我们必然可以找到唯一的点对$(i,j)$,满足$i%p=x,i%(p-1)=m,j%p=n,j%(p-1)=y$,因此,只要将每一组$i^{j} mod p$扔进桶里,记余数为$i$的点对数为$c(i)$,那么答案为:$sum limits_{i=0}^{p-1}c(i)^2$。
考虑如何快速求出每个桶中的元素个数。考虑乘法取模不好处理,不难想到可以用原根来代替,那么原来的条件$x^{y} equiv n^{m} mod p$就变为了$g^{xy} equiv g^{nm}$,可以转化为寻找$0<=a,b,c,d<p-1$的四元组,使得$a*b equiv n*m$,注意这里忽略了$x=0$或$n=0$的情况(无法用$g^{x}$表示),可以用$(p-1)^2$计算出来。
考场上想到这里就死了。设$cnt(n)$表示满足$0<=a,b,c,d<n$的四元组个数,令$n=prod pi^ci$之后可以用$crt$得到:$cnt(n) = prod cnt(p_{i}^{c_{i}})$
那么只需要求出$cnt(p^k)$。设$c(i)$表示桶$i$中元素的个数,令$i=p^{c}*s$那么有:
$c(i)=(c+1)*p^{k-1}*(p-1),c(0)=(k+1)*(p-1)*p^{e-1}$,大致就是枚举数对$(a,b)$中含有p的个数,计算相应的贡献。
所以发现桶中元素的个数只与$c$有关,所以直接枚举$c$计算即可。最终答案就是$cnt(p-1)$;
未来拼图
若将原序列$p$看成一个多项式,题中给的$A$数组就是$p$的循环卷积。直接将A用DFT转化为点值表达式,然后将点值开方然后IDFT回去就可以得到原多项式。
但是复数开方会得到两个值,所以可以暴力枚举得到的是哪一个,暴力检验即可 。
$O(T*2^{frac{n}{2}}*n^2)$
完美理论
发现直接做的话限制条件是同时选两个点,那么必须选某些点,然而并不会处理同时选两个点的情况,然后就死了。
然而我们可以枚举一个联通块的根,那么选择某个点必须选择他的父亲,限制条件就只剩一个点了,直接最大权闭合子图即可。