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} \frac{q_{i}}{(i-j)^2}-\sum_{i=j+1}^{n} \frac{q_{i}}{(i-j)^2}Ej​=qj​Fj​​=∑i=1j−1​(i−j)2qi​​−∑i=j+1n​(i−j)2qi​​

思想一: 只要是能在时间范围内弄出来的函数,都可以直接转

令f(i)=1i2令f(i)=\frac{1}{i^2}令f(i)=i21​

Ej=∑i=1j−1qi×f(j−i)−∑i=j+1nqi×f(i−j)E_j= \sum_{i=1}^{j-1} {q_{i}} \times f(j-i)-\sum_{i=j+1}^{n} {q_{i}} \times f(i-j)Ej​=∑i=1j−1​qi​×f(j−i)−∑i=j+1n​qi​×f(i−j)

前者卷积式,后者再推:
\text{}
\text{}
\text{}

思想二:重定义,让参数从1开始

∑i=j+1nqif(i−j)\sum_{i=j+1}^{n} {q_{i}}f(i-j)∑i=j+1n​qi​f(i−j)

=qj+1f(1)+qj+2f(2)+qj+3f(3)+......qj+(n−j)f(n−j)=q_{j+1}f(1)+q_{j+2}f(2)+q_{j+3}f(3)+......q_{j+(n-j)}f(n-j)=qj+1​f(1)+qj+2​f(2)+qj+3​f(3)+......qj+(n−j)​f(n−j)

=∑t=1n−jqj+tf(t)=\sum_{t=1}^{n-j} {q_{j+t}}f(t)=∑t=1n−j​qj+t​f(t)

\text{}
\text{}
\text{}

思想三:卷积的2个多项式参数都为正时,翻转使其中一个变负

令q(j+t)=q′(n−j−t+1)令q(j+t)=q'(n-j-t+1)令q(j+t)=q′(n−j−t+1)

原式=∑t=1n−jq′(n−j−t+1)f(t)原式=\sum_{t=1}^{n-j} {q'(n-j-t+1)}f(t)原式=∑t=1n−j​q′(n−j−t+1)f(t)

令k=n−j原式为∑t=1kq′(k−t+1)f(t)令k=n-j \ \ 原式为\sum_{t=1}^{k} {q'(k-t+1)}f(t)令k=n−j  原式为∑t=1k​q′(k−t+1)f(t)

正好表示卷积后第k+1k+1k+1项的系数
\text{}\text{}
\text{}
\text{}

所以,总结:
Ej=∑i=1j−1qi×f(j−i)−∑t=1kq′(k−t+1)f(t)E_j= \sum_{i=1}^{j-1} {q_{i}} \times f(j-i)-\sum_{t=1}^{k} {q'(k-t+1)}f(t)Ej​=∑i=1j−1​qi​×f(j−i)−∑t=1k​q′(k−t+1)f(t)

A:A :A:将 qqq 与 fff 卷起来,对于每个 jjj,取第 jjj 项系数
B:B:B:将 q′q'q′ 与 fff 卷起来,对于每个 jjj,取第 n−j+1n-j+1n−j+1项系数
A−BA-BA−B即为所求

精度问题:

(double)(1.0 / i / i)
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const double pi=acos(-1.0);
const int N=1000100;int limit,rev[N];
struct comp{double x,y;comp(double xx=0,double yy=0) { x=xx;y=yy; }friend comp operator + (const comp &a,const comp &b) { return comp(a.x+b.x , a.y+b.y); }friend comp operator - (const comp &a,const comp &b) { return comp(a.x-b.x , a.y-b.y); }friend comp operator * (const comp &a,const comp &b) { return comp(a.x*b.x-a.y*b.y , a.y*b.x + a.x*b.y); }
}q[N],Q[N],f[N];//A[N<<3],B[N<<3];//limit最大6*N int minn(int x,int y) { return x<y?x:y; }
void fft(comp *a,double f)
{for(int i=0;i<limit;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);for(int mid=1;mid<limit;mid<<=1){comp wn=comp(cos(pi/mid),f*sin(pi/mid));for(int L=0,R=(mid<<1);L<limit;L+=R){comp w=comp(1.0,0.0);for(int k=0;k<mid;k++,w=w*wn){comp A1=a[L+k],A2=w*a[L+k+mid];a[L+k]=A1+A2;a[L+k+mid]=A1-A2;}}}if(f==-1)for(int i=0;i<limit;++i) a[i].x/=limit;
}
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%lf",&q[i].x);for(int i=1;i<=n;i++) Q[i].x=q[n-i+1].x;for(int i=1;i<=n;i++) f[i].x=(double)(1.0/i/i);int nn=(n<<1),l=0;limit=1;while(limit<nn) limit<<=1,l++;for(int i=1;i<limit;i++) rev[i]=(rev[i>>1]>>1)|(i&1)<<(l-1);fft(q,1);fft(Q,1);fft(f,1);for(int i=0;i<limit;i++) Q[i]=Q[i]*f[i],q[i]=q[i]*f[i];fft(Q,-1);fft(q,-1);for(int j=1;j<=n;j++) printf("%.3lf\n",q[j]-Q[n-j+1]);return 0;
}

[卷积系列] P3338 [ZJOI2014]力相关推荐

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

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

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

  3. P3338 [ZJOI2014]力

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

  4. P3338 [ZJOI2014]力 [FFT]

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

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

  6. Luogu P3338 [ZJOI2014]力

    题目大意 给定 nnn 个数 qiq_iqi​,定义Fj=∑i<jqiqj(i−j)2−∑i>jqiqj(i−j)2F_j=\sum_{i<j}\dfrac{q_iq_j}{(i-j ...

  7. P3338 [ZJOI2014] FFT

    题意 传送门 P3338 [ZJOI2014]力 题解 对于左右两项,分别令 k=j−i,k=i−jk = j - i, k = i - jk=j−i,k=i−j Ej=∑k=1j−1qj−kk2−∑ ...

  8. 解题报告(二)B、(P3338 [ZJOI2014])力(FFT经典套路)(2)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 【BZOJ 3527】 [Zjoi2014]力

    3527: [Zjoi2014]力 Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi ...

最新文章

  1. 使用sendfile()让数据传输得到最优化,TCP_CORK、TCP_DEFER_ACCEPT和TCP_QUICKACK优化网络...
  2. PropertyGrid自定义控件
  3. Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
  4. 一分钟带你玩转 Spring IoC
  5. 线性筛素数的实现与证明
  6. 大数据分布式工作流任务调度系统DolphinScheduler v1.3.4
  7. C语言mutex使用案例,C语言 如何使用互斥锁严格交替使用两个线程?
  8. 剑指offer(C++)-JZ28:对称的二叉树(数据结构-树)
  9. JAVA 正则表达式4种常用的功能
  10. hadoop hive集群_大数据专栏 | Hive 安装初体验
  11. 小马哥-Java 微服务实践 - Spring Boot 系列-01Java 微服务实践 - Spring Boot 系列(一)初体验...
  12. Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
  13. 找到Java中长整型(long)所能表示的最大素数: 9223372036854775783
  14. 《曾国藩传》读书笔记
  15. EMW3080+STC15轻松实现设备上云1(阿里云物联网平台、智能生活开放平台)
  16. 网易2019实习生招聘编程题集合 矩形重叠
  17. 关于项目中数据库密码加密的使用
  18. Shell脚本编程实战
  19. Ftest(F检验,P值求取)
  20. 前端开发规范【范本】

热门文章

  1. UltraEdit调整一行显示的十六进制的字符个数
  2. 蚂蚁森林拯救能量之AutoJs实现
  3. 马拉松赛事中应用人脸识别解决方案
  4. CSS学习(第三天)(层叠性、继承性、优先级,CSS 盒子模型)
  5. VM虚拟机安装凝思磐石系统(图形化界面)
  6. lightgbm 保存模型 过大_LightGBM如何进行在线学习工作中每天都会有数据更新以及增量数据,重新训练开销显然太大如何解决?...
  7. 触摸屏通常接在微型计算机,计算机水平测试选择题.pdf
  8. 工业缺陷检测数据扩充论文综述
  9. 游资92科比到底牛在哪里?
  10. 香港理工大学酒店管理html,中国香港理工大学酒店管理专业分析