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=1∑j−1​(i−j)2qi​×qj​​−i=j+1∑n​(i−j)2qi​×qj​​Ej​=i=1∑j−1​(i−j)2qi​​−i=j+1∑n​(i−j)2qi​​f(i)=qi​,g(i)=i21​,f(0)=0,g(0)=0Ej​=i=0∑j​f(i)g(j−i)−i=j∑n​f(i)g(i−j)

前项是标准的多项式卷积,后项我们另考虑后项。

∑i=jnf(i)g(i−j)\sum\limits_{i = j} ^{n} f(i) g(i - j)i=j∑n​f(i)g(i−j),T=i−jT = i - jT=i−j,i=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=0∑n−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=0∑n−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=0∑T​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)相关推荐

  1. P3338 [ZJOI2014]力 FFT + 推式子

    传送门 文章目录 题意: 思路: 题意: 思路: 这个式子看起来很FFTFFTFFT,让我们来化简一下. 考虑EEE中直接将qiq_iqi​约掉,所以Ei=∑j=1i−1qj(i−j)2−∑j=i+1 ...

  2. P3338 [ZJOI2014]力 [FFT]

    P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力 给出n个数qi,给出Fj的定义如下: Fj=∑i<jqiqj(i−j)2−∑i>jqiq ...

  3. P3338 [ZJOI2014]力 —— FFT

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 解题思路: Ei=Fiqi=∑j=1i−1qj(i−j)2−∑j=i+1nqj(i−j)2E_i=\frac{F_i}{q_i} = \sum_{j=1}^ ...

  4. P3338 [ZJOI2014]力

    P3338 [ZJOI2014]力 卷积 + FFT 题意 思路 Code(921ms) 传送门: https://www.luogu.com.cn/problem/P3338 题意 Fj=∑i=1j ...

  5. [卷积系列] P3338 [ZJOI2014]力

    P3338 [ZJOI2014]力 Ej=Fjqj=∑i=1j−1qi(i−j)2−∑i=j+1nqi(i−j)2E_j= \frac{F_{j}}{q_{j}} =\sum_{i=1}^{j-1} ...

  6. BZOJ.3527.[ZJOI2014]力(FFT)

    题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...

  7. BZOJ3527:[ZJOI2014]力(FFT)

    Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...

  8. BZOJ3527: [Zjoi2014]力 [FFT]

    化简之后,发现减号左边的式子是一个卷积.右边的式子,把一个函数倒序就是卷积,分别FFT,求解答案. 大佬blog: https://blog.csdn.net/kyleyoung_ymj/articl ...

  9. bzoj3527: [Zjoi2014]力 fft

    题意:求\(E_i=\sum_{j=1}^{i-1}qj/{(i-j)^2}-\sum_{j=i+1}^{n}qj/{(i-j)^2}\) 题解:构造前几个Ei,可以发现\(E_i=a_i*b_{j- ...

最新文章

  1. 故障发生前为什么敏捷团队的成功?
  2. 分布式服务框架 Zookeeper(二)官方介绍
  3. 一个菜鸟程序猿--再谈六月坚持英语学习
  4. cocos2dx-lua控制台报错集合
  5. IPv4数据报格式及其语义
  6. 加括号改变连除式结果(洛谷P2651题题解,Java语言描述)
  7. Python字典按值排序、包含字典的列表按字典值排序的方法
  8. GitHub上最火的40个Android开源项目(二)
  9. 知到网课教师口语艺术考试题库(含答案)
  10. 还在苦恼如何查看微信共同好友吗?用Python轻松搞定
  11. 当索尼停产单反:好产品是怎么被时代「消融」的?
  12. Region Proposal by Guided Anchoring论文解读
  13. LeetCode:20 vaild parentless
  14. 【漏洞挖掘】QQ钓鱼网站实战渗透
  15. 〖Python零基础入门篇㊼〗- 包与模块
  16. 分享 :准备数据时如何避免数据泄漏
  17. IT运维相关技术文档
  18. 互联网公司招聘--奇虎360--研发工程师--2016年笔试题
  19. OK6410开发板调试EC20通信模块
  20. 计算几何基础入门详解

热门文章

  1. python编译器如何设置中文_如何使setup.py test使用特定的fortran编译器?
  2. python中的标识符能不能使用关键字_Python中的标识符不能使用关键字
  3. 嘘!偷偷教你们一个在双十一省钱的办法!
  4. 化学版2048,你玩过吗?内含游戏链接
  5. python根据地址查看变量名_tensorflow创建变量以及根据名称查找变量
  6. Java标签移动_如何使用基于鼠标单击的标签移动特定游戏对象?
  7. echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图
  8. c语言课程设计加密程序,C语言课程设计文件加密解密.doc
  9. java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...
  10. mysql同时查两张表数据库表_如何同时查询两个数据库表?