摘要:
先算出lcm(a,b),如果lcm>=n,则直接暴力解决;否则分段,求出0-lcm内的+0-n%lcm内的值。再就是连续相同的一起计算!! 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define ll __int6410 using namespace std;11 ll gcd(ll a,ll b){12 ll t;13 if(an) temp=n-i; //如果i+temp>n 则后面最多只有n-i个数了31 ans +... 阅读全文
摘要:
解题报告:记录 A_i 为长度为 i 的树枝的数量,并让 A 对它本身做 FFT,得到任意选两个树枝能得到的各个和的数量。枚举第三边,计算出所有两边之和大于第三条边的方案数,并把前两条边包含最长边的情况减掉就是答案。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0) 10 using namespace std; 11 const int MAX = 400002; 12 //复数结构... 阅读全文
摘要:
此处介绍另一种方法来解决这题,也就是FFT(快速傅里叶变换)如果是乘法,位数为n和位数为m的相乘,需要n*m次的乘法运算。FFT在数字信号处理学过,但是第一次用来做这类题目,神奇啊。乘法其实就是做线性卷积。用DFT得方法可以求循环卷积,但是当循环卷积长度L≥N+M-1,就可以做线性卷积了。使用FFT将两个数列转换成傅里叶域,在这的乘积就是时域的卷积。给几个学习的链接吧:http://wenku.baidu.com/view/8bfb0bd476a20029bd642d85.html (这主要看那个FFT的流程图)http://wlsyzx.yzu.edu.cn/kcwz/szxhcl/kech 阅读全文