[卷积系列] 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} \frac{q_{i}}{(i-j)^2}-\sum_{i=j+1}^{n} \frac{q_{i}}{(i-j)^2}Ej=qjFj=∑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−1qi×f(j−i)−∑i=j+1nqi×f(i−j)
前者卷积式,后者再推:
\text{}
\text{}
\text{}
思想二:重定义,让参数从1开始
∑i=j+1nqif(i−j)\sum_{i=j+1}^{n} {q_{i}}f(i-j)∑i=j+1nqif(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+1f(1)+qj+2f(2)+qj+3f(3)+......qj+(n−j)f(n−j)
=∑t=1n−jqj+tf(t)=\sum_{t=1}^{n-j} {q_{j+t}}f(t)=∑t=1n−jqj+tf(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−jq′(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=1kq′(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−1qi×f(j−i)−∑t=1kq′(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]力相关推荐
- 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]力 FFT + 推式子
传送门 文章目录 题意: 思路: 题意: 思路: 这个式子看起来很FFTFFTFFT,让我们来化简一下. 考虑EEE中直接将qiq_iqi约掉,所以Ei=∑j=1i−1qj(i−j)2−∑j=i+1 ...
- P3338 [ZJOI2014]力
P3338 [ZJOI2014]力 卷积 + FFT 题意 思路 Code(921ms) 传送门: https://www.luogu.com.cn/problem/P3338 题意 Fj=∑i=1j ...
- P3338 [ZJOI2014]力 [FFT]
P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力 给出n个数qi,给出Fj的定义如下: Fj=∑i<jqiqj(i−j)2−∑i>jqiq ...
- 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}^ ...
- 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 ...
- 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−∑ ...
- 解题报告(二)B、(P3338 [ZJOI2014])力(FFT经典套路)(2)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 【BZOJ 3527】 [Zjoi2014]力
3527: [Zjoi2014]力 Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi ...
最新文章
- 使用sendfile()让数据传输得到最优化,TCP_CORK、TCP_DEFER_ACCEPT和TCP_QUICKACK优化网络...
- PropertyGrid自定义控件
- Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
- 一分钟带你玩转 Spring IoC
- 线性筛素数的实现与证明
- 大数据分布式工作流任务调度系统DolphinScheduler v1.3.4
- C语言mutex使用案例,C语言 如何使用互斥锁严格交替使用两个线程?
- 剑指offer(C++)-JZ28:对称的二叉树(数据结构-树)
- JAVA 正则表达式4种常用的功能
- hadoop hive集群_大数据专栏 | Hive 安装初体验
- 小马哥-Java 微服务实践 - Spring Boot 系列-01Java 微服务实践 - Spring Boot 系列(一)初体验...
- Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
- 找到Java中长整型(long)所能表示的最大素数: 9223372036854775783
- 《曾国藩传》读书笔记
- EMW3080+STC15轻松实现设备上云1(阿里云物联网平台、智能生活开放平台)
- 网易2019实习生招聘编程题集合 矩形重叠
- 关于项目中数据库密码加密的使用
- Shell脚本编程实战
- Ftest(F检验,P值求取)
- 前端开发规范【范本】
热门文章
- UltraEdit调整一行显示的十六进制的字符个数
- 蚂蚁森林拯救能量之AutoJs实现
- 马拉松赛事中应用人脸识别解决方案
- CSS学习(第三天)(层叠性、继承性、优先级,CSS 盒子模型)
- VM虚拟机安装凝思磐石系统(图形化界面)
- lightgbm 保存模型 过大_LightGBM如何进行在线学习工作中每天都会有数据更新以及增量数据,重新训练开销显然太大如何解决?...
- 触摸屏通常接在微型计算机,计算机水平测试选择题.pdf
- 工业缺陷检测数据扩充论文综述
- 游资92科比到底牛在哪里?
- 香港理工大学酒店管理html,中国香港理工大学酒店管理专业分析