P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力

给出n个数qi,给出Fj的定义如下:

Fj=∑i&lt;jqiqj(i−j)2−∑i&gt;jqiqj(i−j)2F_j = \sum_{i&lt;j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i&gt;j}\frac{q_i q_j}{(i-j)^2 }Fj​=i<j∑​(i−j)2qi​qj​​−i>j∑​(i−j)2qi​qj​​

令Ei=Fi/qiEi=Fi/qiEi=Fi/qi,求EiEiEi.


Solution

Ei=Fi/qi=∑j&lt;iqj(j−i)2−∑j&gt;iqj(j−i)2Ei = F_i/q_i = \sum_{j&lt;i}\frac{q_j}{(j-i)^2 }-\sum_{j&gt;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&lt;iqjxj−i−∑j&gt;iqjxj−iEi = \sum_{j&lt;i}q_jx_{j-i} - \sum_{j&gt;i}q_jx_{j-i}Ei=j<i∑​qj​xj−i​−j>i∑​qj​xj−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−1​qj​xi−j​−j=i+1∑n​qj​xi−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−1​qj​xi−j​−j=i+1∑n​qj​xj−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−1​qj​xi−j​−j=i+1∑n​bn−j+1​xj−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]相关推荐

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

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

  2. 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}^ ...

  3. 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, ...

  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. java字符串分解 StringTokenizer用法
  2. php二进制整数相加怎么解决_PHP两个n位的二进制整数相加问题的解决
  3. Win10系统删除文件需提供管理员权限-- 解决方案
  4. 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
  5. java 通过反射获取调用类方法及属性
  6. python2.x- selenium-robot framework自动化测试环境搭建
  7. nginx基本数据结构及接口
  8. INFO:安装包文件共享(Shared Files)设置注意事项
  9. Swift5之网易云音乐页面搭建
  10. python书籍_Python书籍大汇总——入门到实战
  11. matlab生成低通滤波,用matlab设计低通滤波器
  12. Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑
  13. 微信投票python脚本_微信投票python脚本
  14. Mysql:实战2000W条数据实现全文检索
  15. EasyUI icon 小图标库,应有尽有(5000多个)打包下载
  16. JavaWeb网上商城项目中用户注册,使用MailServer和FoxMail搭建本地邮件服务器
  17. 关于右键无法选择codeblocks打开cpp或c文件
  18. 旅游四天,吃了一顿七千的饭,坐了一趟一万多的地铁,心疼肾更疼
  19. 微信公众平台开发技术文档
  20. 关于制作Unity动画的时候出现的问题:

热门文章

  1. CSS动画实现心跳效果
  2. python的zipfile.open_Python模块:zipfile
  3. Zabbix5.0 使用SNMPv2监控华为交换机
  4. FMS安装与简单应用
  5. flutter安装开发环境-问题记录
  6. swiper插件实现幻灯片左右箭头切换效果。
  7. 第十七章:线性动态规划
  8. Java程序设计 北京大学 Week8互评作业
  9. 工程师应该掌握的10个超经典模拟电路
  10. m基于simulink和S函数实现SVPWM永磁同步电机双PI转矩脉动控制系统仿真