兩道FFT的應用題

2021-07-29 12:24:01 字數 2458 閱讀 4957

計算: c[

k]=∑

k≤ia[i]

∗b[i

−k])

正好看到《具體數學》上處理和式的tricks,雖然熱身題也不會做,但碾oi題還是很穩的(orz神犇高教授)…

對於:∑k≤

ia[i]

∗b[i

−k])

將b陣列倒置,即b[

i]=b

′[n−

1−i]

,原式變為:c[

k]=∑

0≤i0≤n+

k−1−

ia[i]

∗b′[

n+k−

1−i]

) 化簡得到c[

k]=∑

k≤i≤

n+k−

1(a[

i]∗b

′[n+

k−1−

i])

我們想得到形如c′

[k]=

∑0≤i

≤ka[

i]∗b

′[k−

i]的形式。只需要將後式中的

k 用k+

n−1替換:c′

[k+n

−1]=

∑ia[

i]∗b

′[k+

n−1−

i]條件是0≤

k+n−

1−ik≤i≤

n+k−

1 所以c

[k]=

c′[k

+n−1

]=∑k

≤i≤n

+k−1

a[i]

∗b′[

k+n−

1−i]

然後用卷積做就好了。

#include 

using

namespace

std;

typedef

complex

complex;

const

int maxn = 300005;

int rev[maxn];

complex a[maxn];

complex a[maxn], b[maxn], c[maxn];

int n;

void fft(complex a, int n, int flag)}}

for (int i = 0; i < n; i++)

a[i] = a[i]/complex(flag==1?1:n,0);

}int main()

int nn = 1;

while (nn < n*2) nn <<= 1;

fft(a, nn, 1), fft(b, nn, 1);

for (int i = 0; i < nn; i++) c[i] = a[i]*b[i];

fft(c, nn, -1);

for (int i = 0; i < n; i++) printf("%d\n", int(c[i+n-1].real()+0.01));

return

0;}

給定乙個ab串,求所有不連續回文子串行的數量和。

由於卷積可以處理關於乙個對稱軸兩側對稱的字元總數,因此將串中的a、b變為0、1,自己和自己做卷積,就可以求出所有對稱軸下b所對應數對稱的字元總數。然後把a、b變為1、0,求出a的結果,相加即為關於對稱軸兩邊對稱的總字元數ai

,則2a

i 就是關於其對稱的字串總數。

那麼如何去除連續的呢?跑一遍manacher就好了。複雜度o(

nlgn)

#include 

using namespace std;

const int maxn = 300005;

typedef complex complex;

int rev[maxn];

complex a[maxn];

const long

long

mod = 1000000007ll;

void fft(complex a, int n, int flag)}}

for (int i = 0; i < n; i++)

a[i] = a[i]/(flag == 1?1:complex(n,0));

}int p[maxn];

long

long manacher(char

str, int n)

ans--;

id = mx = 0;

for (int i = 1; i < n; i++)

return ans;

}long

long power(int a, int n)

char

str[maxn];

complex a[maxn], c[maxn];

int cp[maxn];

int main()

倍增的兩道應用題(題解報告)

題目鏈結 題意 題意不難看懂,就是要求兩點間道路中最大權值的最小值 思路 這道題有很多種解法,這裡講利用lca的解法 首先我們知道,解肯定是建立在最大生成樹上的 先用kruscal建最大生成樹 然後再在lca中維護乙個d u,v 表示從節點u走到節點v經過的道路的最小權重 然後就可以上 了 ac i...

益智題 (簡單的兩道題)

a公司拍攝的 黃河頌 獲最佳故事獎 b公司的 孫悟空 獲最佳武術獎 c公司的 白娘子 獲最佳戲劇獎。a公司的經理說 我們三經理的姓分別是三部片名的第乙個字,而又同自己所拍 首字不一樣。另一公司的孫經理笑著說 真是這樣 那三經理各姓什麼?答案 a白 b黃 c孫 另一公司的孫經理 說明a不姓孫,而a又不...

兩道題題引發的思考

下週的討論課又到我講 了,這幾天都在看 準備ppt,選了一篇好難的 啊,看了這麼久了,還是不夠清晰。所以決定先換下思路,做點題。下面的 輸出是什麼 void add int p add p int main 分析這個題目看起來還是比較友好的。首先我們來分析一下add 函式。其實看名字就能知道它是在做...