P3338 [ZJOI2014]力 [FFT]
P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力
给出n个数qi,给出Fj的定义如下:
Fj=∑i<jqiqj(i−j)2−∑i>jqiqj(i−j)2F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i q_j}{(i-j)^2 }Fj=i<j∑(i−j)2qiqj−i>j∑(i−j)2qiqj
令Ei=Fi/qiEi=Fi/qiEi=Fi/qi,求EiEiEi.
Solution
Ei=Fi/qi=∑j<iqj(j−i)2−∑j>iqj(j−i)2Ei = F_i/q_i = \sum_{j<i}\frac{q_j}{(j-i)^2 }-\sum_{j>i}\frac{q_j}{(j-i)^2 }Ei=Fi/qi=j<i∑(j−i)2qj−j>i∑(j−i)2qj
设xi=i2x_i = i^2xi=i2
Ei=∑j<iqjxj−i−∑j>iqjxj−iEi = \sum_{j<i}q_jx_{j-i} - \sum_{j>i}q_jx_{j-i}Ei=j<i∑qjxj−i−j>i∑qjxj−i
即
Ei=∑j=1i−1qjxi−j−∑j=i+1nqjxi−jE_i = \sum_{j=1}^{i-1}q_jx_{i-j}-\sum_{j=i+1}^nq_jx_{i-j}Ei=j=1∑i−1qjxi−j−j=i+1∑nqjxi−j
这已经是卷积形式了
然而 减数 中的xi−jx_{i-j}xi−j下标为负数, 所以转换成
Ei=∑j=1i−1qjxi−j−∑j=i+1nqjxj−iE_i = \sum_{j=1}^{i-1}q_jx_{i-j}-\sum_{j=i+1}^nq_jx_{j-i}Ei=j=1∑i−1qjxi−j−j=i+1∑nqjxj−i
为了保持卷积形式, 继续设bi=qn−i+1b_i = q_{n-i+1}bi=qn−i+1
Ei=∑j=1i−1qjxi−j−∑j=i+1nbn−j+1xj−iE_i = \sum_{j=1}^{i-1}q_jx_{i-j}-\sum_{j=i+1}^nb_{n-j+1}x_{j-i}Ei=j=1∑i−1qjxi−j−j=i+1∑nbn−j+1xj−i
这又是一个卷积形式了!!!
于是FFTFFTFFT走起~
Attention
FFTFFTFFT要开2倍数组
不要漏掉蝴蝶变化
Code
#include<cstdio>
#include<cmath>
#include<algorithm>const int maxn = 1e6 + 5;
const double Pi = acos(-1);int N, N1, rev[maxn];struct complex{ double x, y; complex(double x = 0, double y = 0):x(x), y(y) {} } q[maxn], A[maxn], C[maxn], B[maxn];complex operator + (complex a, complex b){ return complex(a.x+b.x, a.y+b.y); }
complex operator - (complex a, complex b){ return complex(a.x-b.x, a.y-b.y); }
complex operator * (complex a, complex b){ return complex(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x); }void FFT(complex *F, short Opt){for(int i = 0; i < N1; i ++)if(i < rev[i]) std::swap(F[i], F[rev[i]]);for(int p = 2; p <= N1; p <<= 1){int len = p >> 1;complex tmp(cos(Pi/len), Opt*sin(Pi/len));for(int i = 0; i < N1; i += p){complex Buf(1, 0);for(int k = i; k < i+len; k ++){complex Temp = Buf * F[k+len];F[k+len] = F[k] - Temp;F[k] = F[k] + Temp;Buf = Buf * tmp;}}}
}int main(){scanf("%d", &N);for(int i = 1; i <= N; i ++) scanf("%lf", &q[i].x), A[N-i+1] = q[i];for(int i = 1; i <= N; i ++) C[i].x = (1.0/(double)(i))/(double)(i);N1 = 1;int bit_num = 0;while(N1 <= (N<<1)) N1 <<= 1, bit_num ++;for(int i = 0; i < N1; i ++) rev[i] = (rev[i>>1]>>1)|((i&1) << bit_num-1);FFT(A, 1), FFT(q, 1), FFT(C, 1);for(int i = 0; i <= N1; i ++) B[i] = q[i] * C[i], A[i] = A[i] * C[i];FFT(A, -1), FFT(B, -1);for(int i = 1; i <= N; i ++) printf("%.3lf\n", (B[i].x - A[N-i+1].x)/N1);return 0;
}
P3338 [ZJOI2014]力 [FFT]相关推荐
- P3338 [ZJOI2014]力 FFT + 推式子
传送门 文章目录 题意: 思路: 题意: 思路: 这个式子看起来很FFTFFTFFT,让我们来化简一下. 考虑EEE中直接将qiq_iqi约掉,所以Ei=∑j=1i−1qj(i−j)2−∑j=i+1 ...
- 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}^ ...
- 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, ...
- P3338 [ZJOI2014]力
P3338 [ZJOI2014]力 卷积 + FFT 题意 思路 Code(921ms) 传送门: https://www.luogu.com.cn/problem/P3338 题意 Fj=∑i=1j ...
- [卷积系列] 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} ...
- BZOJ.3527.[ZJOI2014]力(FFT)
题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...
- BZOJ3527:[ZJOI2014]力(FFT)
Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...
- BZOJ3527: [Zjoi2014]力 [FFT]
化简之后,发现减号左边的式子是一个卷积.右边的式子,把一个函数倒序就是卷积,分别FFT,求解答案. 大佬blog: https://blog.csdn.net/kyleyoung_ymj/articl ...
- 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- ...
最新文章
- java字符串分解 StringTokenizer用法
- php二进制整数相加怎么解决_PHP两个n位的二进制整数相加问题的解决
- Win10系统删除文件需提供管理员权限-- 解决方案
- 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
- java 通过反射获取调用类方法及属性
- python2.x- selenium-robot framework自动化测试环境搭建
- nginx基本数据结构及接口
- INFO:安装包文件共享(Shared Files)设置注意事项
- Swift5之网易云音乐页面搭建
- python书籍_Python书籍大汇总——入门到实战
- matlab生成低通滤波,用matlab设计低通滤波器
- Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑
- 微信投票python脚本_微信投票python脚本
- Mysql:实战2000W条数据实现全文检索
- EasyUI icon 小图标库,应有尽有(5000多个)打包下载
- JavaWeb网上商城项目中用户注册,使用MailServer和FoxMail搭建本地邮件服务器
- 关于右键无法选择codeblocks打开cpp或c文件
- 旅游四天,吃了一顿七千的饭,坐了一趟一万多的地铁,心疼肾更疼
- 微信公众平台开发技术文档
- 关于制作Unity动画的时候出现的问题: