FFT(快速傅利葉變換)

2021-07-25 03:48:00 字數 2407 閱讀 3571

大佬部落格

hdu 4609

題意:給定乙個陣列,問從其中選3個值能構成三角形的概率是多少。

思路:先求出選兩個之和的情況,然後列舉選取的最長邊,根據三角形的三邊定理來求解。

選兩個之和的情況及是,先將長度相同的統計起來,然後求這個陣列的卷積,其值就是和為i的有多少個,也就是**中的num陣列。

/*

這裡解釋一下什麼是兩個陣列的卷積,假如給定兩個一元多項式,

他們兩個多項式的係數會成為兩個陣列,而這兩個多項式相乘,

會形成另乙個一元多項式,而這個一元多項式的各項係數就是上面

兩個陣列的卷積。

*/#include //fft求a陣列和b陣列的卷積

#include //num[i]存的就是卷積的最後結果也就是次冪為i的多項式係數是多少

#include //比如num[2]=3代表的就是x^2前面的係數是3

#include

#include

using

namespace

std;

#define ll long long

const

double pi=acos(-1.0);

const

int maxn=400040;

int x[maxn];

ll num[maxn];//儲存求得的卷積結果

ll sum[maxn];//字首和陣列

struct complex//定義乙個複數類及其運算

complex operator -(const complex &b)const

complex operator +(const complex &b)const

complex operator *(const complex &b)const

} x1[maxn],x2[maxn];

void rader(complex y,int len)//雷德演算法--倒位序

if(jvoid fft(complex y,int len,int on)//fft實現}}

if(on==-1)

int init(ll a,ll b,int n)

int main()

sort(x,x+n);

int len=init(num,num,n);

conv(x1,x2,len);

for(int i=0; i//減去2次選的同乙個數

num[x[i]+x[i]]--;

for(int i=1; i<=len; i++) num[i]/=2; //選1 2和選2 1是一樣的所以除2

sum[0]=0;

for(int i=1; i<=len; i++) //num的字首和

sum[i]=sum[i-1]+num[i];

ll ans=0;

for(int i=0; i//取3個a[i]為最長邊的取法

ll all=1ll*n*(n-1)*(n-2)/6;//所有情況

printf("%.7lf\n",1.0*ans/all);

}}

hdu 1402

題意:大數乘法卡時間要nlognfft優化

#include 

#include

#include

#include

#include

using

namespace

std;

#define ll long long

const

double pi=acos(-1.0);

const

int maxn=500050;

char s1[maxn],s2[maxn];

int num[maxn];//儲存求得的卷積結果

struct complex//定義乙個複數類及其運算

complex operator -(const complex &b)const

complex operator +(const complex &b)const

complex operator *(const complex &b)const

} x1[maxn],x2[maxn];

void rader(complex y,int len)//雷德演算法--倒位序

if(jvoid fft(complex y,int len,int on)//fft實現}}

if(on==-1)

void init()

void solve()

int f=0;

for(int i=len;i>=0;i--)

}if(!f) printf("0");

printf("\n");

}int main()

}

快速傅利葉變換FFT

fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...

快速傅利葉變換 FFT

bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...

快速傅利葉變換 FFT

首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...