传送门:点击打开链接
题意:给出A数组和B数组,对于每一个A[i],B[j],如果A[i]>=B[j],则变成A[i]-B[j],否则A[i]+B[j]
思路:很显然可以看出fft。但是刚开始却很难想到怎么去把两种情况给分开。
这里有个非常神奇的思路,那就是分治,把区间分成2个部分。A[l,m],A[m+1,r],B[l,m],B[m+1,r]
计算A[l,m]和B[l,m],以及A[m+1,r]和B[m+1,r]对答案贡献时,直接递归
计算A[l,m]和B[m+1,r],以及A[m+1,r]和B[l,m]对答案的贡献时,用fft
这里fft时也非常有技巧,因为两个数组完全独立,所以最后的总长度到达当前递归时区间长度就行了。
关于fft时下标的前后转换,我们可以通过表示出之前的下标,和变换后的下标直接的等量关系,
可以定向的通过数学表达式而搞定。
这道题比较卡时间,顺手加了个输入挂
#include