博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ZJOI 2014]力
阅读量:4683 次
发布时间:2019-06-09

本文共 2631 字,大约阅读时间需要 8 分钟。

Description

给出n个数qi,给出Fj的定义如下:
$$F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i q_j}{(i-j)^2 }$$
令Ei=Fi/qi,求Ei.

Input

第一行一个整数n。
接下来n行每行输入一个数,第i行表示qi。
n≤100000,0<qi<1000000000

Output

 n行,第i行输出Ei。与标准答案误差不超过1e-2即可。

Sample Input

5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880

Sample Output

-16838672.693
3439.793
7509018.566
4595686.886
10903040.872

题解

约掉 $q_i$ $$E_j = \sum_{i<j}\frac{q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_j}{(i-j)^2 }$$

我们拿出 $A_i=\sum\limits_{i<j}\frac{q_j}{(i-j)^2 }$ 讨论。

构造第一个多项式系数依次为 $q_i,i\in[0,n)$ ,第二个多项式系数 $\begin{cases}0 &i=0\\ \frac{1}{i^2} &i\in[1,n)\end{cases}$

卷积之后第 $i$ 项就是所求的 $A_i$ 。之后的类似,对于 $A'_i=\sum\limits_{i>j}\frac{q_j}{(i-j)^2 }$ 只要把第一个多项式翻转,卷积后第 $n-1-i$ 项就是所求的 $A'_i$ 。

1 //It is made by Awson on 2018.1.28 2 #include 
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #define LL long long17 #define dob complex
18 #define Abs(a) ((a) < 0 ? (-(a)) : (a))19 #define Max(a, b) ((a) > (b) ? (a) : (b))20 #define Min(a, b) ((a) < (b) ? (a) : (b))21 #define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))22 #define writeln(x) (write(x), putchar('\n'))23 #define lowbit(x) ((x)&(-(x)))24 using namespace std;25 const int N = 100000*4;26 const double pi = acos(-1.0);27 28 int n, m, s, L, R[N+5];29 double q[N+5], sum, ans[N+5];30 dob a[N+5], b[N+5];31 32 void FFT(dob *A, int o) {33 for (int i = 0; i < n; i++) if (i > R[i]) swap(A[i], A[R[i]]);34 for (int i = 1; i < n; i <<= 1) {35 dob wn(cos(pi/i), sin(pi*o/i)), x, y;36 for (int j = 0; j < n; j += (i<<1)) {37 dob w(1, 0);38 for (int k = 0; k < i; k++, w *= wn) {39 x = A[j+k], y = w*A[i+j+k];40 A[j+k] = x+y, A[i+j+k] = x-y;41 }42 }43 }44 }45 void work() {46 scanf("%d", &n); n--; s = n;47 for (int i = 0; i <= n; i++) scanf("%lf", &q[i]), a[i] = q[i];48 for (int i = 1; i <= n; i++) b[i] = 1./i/i;49 m = n<<1; for (n = 1; n <= m; n <<= 1) L++;50 for (int i = 0; i < n; i++) R[i] = (R[i>>1]>>1)|((i&1)<<(L-1));51 FFT(a, 1), FFT(b, 1);52 for (int i = 0; i <= n; i++) a[i] *= b[i];53 FFT(a, -1);54 for (int i = 0; i <= s; i++) ans[i] = a[i].real()/n;55 for (int i = 0; i <= n; i++) a[i] = 0;56 for (int i = 0; i <= s; i++) a[i] = q[s-i];57 FFT(a, 1);58 for (int i = 0; i <= n; i++) a[i] *= b[i];59 FFT(a, -1);60 for (int i = 0; i <= s; i++) printf("%lf\n", ans[i]-a[s-i].real()/n);61 }62 int main() {63 work();64 return 0;65 }

 

转载于:https://www.cnblogs.com/NaVi-Awson/p/8372585.html

你可能感兴趣的文章
快速求素数和
查看>>
可编辑下拉框(ie6/chrome)
查看>>
Simplify Path
查看>>
redis相关资料
查看>>
zzulioj--1775-- 和尚特烦恼1——是不是素数(素数水题)
查看>>
Android学习笔记-listview实现方式之BaseAdapter
查看>>
深入理解Java内存模型(五)——锁
查看>>
2017/4/19 afternoon
查看>>
如何阅读源代码
查看>>
Web API2 使用默认Identity
查看>>
REORG TABLESPACE on z/os
查看>>
JavaScript常用的经典小技巧
查看>>
使用myeclipse2014整合ss2h
查看>>
C++ 基础学习笔记
查看>>
ubuntu14 编译tensorflow C++ 接口
查看>>
tensorflow C++接口调用图像分类pb模型代码
查看>>
select 项目<选课系统>
查看>>
包、logging模块、hashlib模块、openpyxl模块、深浅拷贝
查看>>
Django框架简易图
查看>>
git 和码云的上传文件代码操作
查看>>