摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给n个棒子,求任意组成3根能形成三角形的概率。 用FFT求出任意两根棒子组合成新的长度,这种长度的组合有多少种。 用cnt[i]表示和的长度为i的棒子组合有多少种。 (1) 首先去掉cnt里重复的部分,一根棒子不能与自己组合,所以有cnt[a[i] * 2] -- (2) 任意两个棒子组合的顺序我们不需要考虑,而实际上他们算了两次,所以有cnt[i] /=2 (3) 枚举所有棒子,假设这根棒子a[i]是组成三角形其中最长的那根,我们首先求出另外两根的长度和比它的长的总... 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 一般的的大数乘法都是直接模拟乘法演算过程,复杂度O(n^2),对于这题来说会超时。乘法的过程基本就是等同于多项式相乘的过程,只是没有进位而已。对于这种问题我们需要转化然后用FFT求解。FFT是用来计算离散傅里叶变化(DFT)及其逆变换(IDFT)的快速算法,复杂度O(n*logn)。DFT有一个很重要的性质:时域卷积,频域乘积;频域乘积,时域卷积。那么什么是时域、频域、卷积、乘积呢?时域和频域是两种信号的分析方法,DFT可以把时域信号变化为频域信号。卷积就是作多项式乘法,乘积就是依次乘... 阅读全文