日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P3338 [ZJOI2014]力(FFT)

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P3338 [ZJOI2014]力(FFT) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

P3338 [ZJOI2014]力

Fj=∑i=1j?1qi×qj(i?j)2?∑i=j+1nqi×qj(i?j)2Ej=∑i=1j?1qi(i?j)2?∑i=j+1nqi(i?j)2f(i)=qi,g(i)=1i2,f(0)=0,g(0)=0Ej=∑i=0jf(i)g(j?i)?∑i=jnf(i)g(i?j)F_j = \sum_{i = 1} ^{j - 1} \frac{q_i \times q_j}{(i - j) ^ 2} - \sum_{i = j + 1} ^{n} \frac{q_i \times q_j}{(i - j) ^ 2}\\ E_j = \sum_{i = 1} ^{j - 1} \frac{q_i}{(i - j) ^ 2} - \sum_{i = j + 1} ^{n} \frac{q_i}{(i - j) ^ 2}\\ f(i) = q_i, g(i) = \frac{1}{i ^ 2}, f(0) = 0, g(0) = 0\\ E_j = \sum_{i = 0} ^{j} f(i) g(j - i) - \sum_{i = j} ^{n} f(i) g(i - j)\\ Fj?=i=1j?1?(i?j)2qi?×qj???i=j+1n?(i?j)2qi?×qj??Ej?=i=1j?1?(i?j)2qi???i=j+1n?(i?j)2qi??f(i)=qi?,g(i)=i21?,f(0)=0,g(0)=0Ej?=i=0j?f(i)g(j?i)?i=jn?f(i)g(i?j)

前項是標準的多項式卷積,后項我們另考慮后項。

∑i=jnf(i)g(i?j)\sum\limits_{i = j} ^{n} f(i) g(i - j)i=jn?f(i)g(i?j)T=i?jT = i - jT=i?ji=T+ji = T + ji=T+j,原式子∑i=0n?jf(i+j)g(i)\sum\limits_{i = 0} ^{n - j} f(i + j)g(i)i=0n?j?f(i+j)g(i)

我們翻轉f(i)f(i)f(i)得到f′(n?i)=f(i)f'(n - i) = f(i)f(n?i)=f(i),代入原式子∑i=0n?jf′(n?(i+j))g(i)\sum\limits_{i= 0} ^{n - j} f'(n - (i + j)) g(i)i=0n?j?f(n?(i+j))g(i)

n?j=Tn - j= Tn?j=T∑i=0Tf′(T?i)g(i)\sum\limits_{i = 0} ^{T} f'(T - i)g(i)i=0T?f(T?i)g(i),也就是一個多項式卷積了。

#include <bits/stdc++.h>using namespace std;struct Complex {double r, i;Complex(double _r = 0, double _i = 0) : r(_r), i(_i) {} };Complex operator + (const Complex &a, const Complex &b) {return Complex(a.r + b.r, a.i + b.i); }Complex operator - (const Complex &a, const Complex &b) {return Complex(a.r - b.r, a.i - b.i); }Complex operator * (const Complex &a, const Complex &b) {return Complex(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r); }Complex operator / (const Complex &a, const Complex &b) {return Complex((a.r * b.r + a.i * b.i) / (b.r * b.r + b.i * b.i), (a.i * b.r - a.r * b.i) / (b.r * b.r + b.i * b.i)); }typedef long long ll;const int N = 1e6 + 10;int r[N];Complex a[N], b[N], c[N];void get_r(int lim) {for (int i = 0; i < lim; i++) {r[i] = (i & 1) * (lim >> 1) + (r[i >> 1] >> 1);} }void FFT(Complex *f, int lim, int rev) {for (int i = 0; i < lim; i++) {if (i < r[i]) {swap(f[i], f[r[i]]);}}const double pi = acos(-1.0);for (int mid = 1; mid < lim; mid <<= 1) {Complex wn = Complex(cos(pi / mid), rev * sin(pi / mid));for (int len = mid << 1, cur = 0; cur < lim; cur += len) {Complex w = Complex(1, 0);for (int k = 0; k < mid; k++, w = w * wn) {Complex x = f[cur + k], y = w * f[cur + mid + k];f[cur + k] = x + y, f[cur + mid + k] = x - y;}}}if (rev == -1) {for (int i = 0; i < lim; i++) {f[i].r /= lim;}} }int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int n, lim = 1;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%lf", &a[i].r);b[n - i].r = a[i].r;c[i].r = 1.0 / i / i;}n <<= 1;while (lim <= n) {lim <<= 1;}get_r(lim);FFT(a, lim, 1);FFT(b, lim, 1);FFT(c, lim, 1);for (int i = 0; i < lim; i++) {a[i] = a[i] * c[i];b[i] = b[i] * c[i];}FFT(a, lim, -1);FFT(b, lim, -1);n >>= 1;for (int i = 1; i <= n; i++) {printf("%.3f\n", a[i].r - b[n - i].r);}return 0; }

總結

以上是生活随笔為你收集整理的P3338 [ZJOI2014]力(FFT)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。