题目描述

给出n个数\(q[i]\),给出\(F[i]\)的定义如下:

\(F[i]=\sum_{j=1}^{i-1}\frac{q[i]*q[j]}{(i-j)^2}-\sum_{j=i+1}^{j=n}\frac{q[i]*q[j]}{(i-j)^2}\)

令\(E[i]=\frac{F[i]}{q[i]}\),求\(E[i]\).

输入输出格式

输入格式:

第一行一个整数n。

接下来n行每行输入一个数,第i行表示qi。

输出格式:

n行,第i行输出Ei。

与标准答案误差不超过1e-2即可。

输入输出样例

输入样例#1:

5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880

输出样例#1:

-16838672.693
3439.793
7509018.566
4595686.886
10903040.872

说明

对于30%的数据,n≤1000。

对于50%的数据,n≤60000。

对于100%的数据,n≤100000,0<qi<1000000000。


第一道FFT的题

看完题后感觉一脸懵逼

\(???\)

之后瞎化了一下然而并没有卵用

开心的看了题解

因为我们要求\(E[i]\)

而\(E[i] = \frac{F[i]}{q[i]}\)

所以\(E[i] = \sum_{j=1}^{i-1}\frac{q[j]}{(i-j)^2} - \sum_{j=i+1}^{n}\frac{q[j]}{(i-j)^2}\)

然后我们设\(g[i]=\frac{1}{i^2}\)

这样\(E[i]=\sum_{j=1}^{i-1}{q[j]*g[i-j]} - \sum_{j=i+1}^{n}{q[j]*g[j-i]}\)

我们可以发现第一项满足卷积

所以第一项就直接把\(q\)和\(g\)卷起来取前n项就好辣

现在考虑第二项怎么化

设\(j=i+k\)

所以右边的式子就可以化成\(\sum_{k=1}^{n-i}{q[i+k]*g[k]}\)

然后我们可以把q数组翻转一下,设为\(revq[i]\)

这样式子就成了\(\sum_{k=1}^{n-i}{revq[n-i-k]*g[k]}\)

满足卷积的基本形式,我们把\(revq\)和\(g\)卷起来取前n项就好辣

但是这次卷积的结果储存在n-i+1上,所以我们要从n开始反着与第一项作差

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
const int M = 400005 ;
using namespace std ;
const double Pi = acos(-1.0) ;struct Complex {double x , y ;Complex (double Tx = 0 , double Ty = 0) { x = Tx , y = Ty ; }
}a[M] , b[M] ;
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) ;
}
int n ;
int l , r[M] , digital = 1 ;
double q[M] , fir[M] , sec[M] ;
inline void FFT(Complex *A , int unit) {for(int i = 0 ; i < digital ; i ++)if(r[i] > i)swap(A[i] , A[r[i]]) ;for(int mid = 1 ; mid < digital ; (mid <<= 1)) {Complex W (cos(Pi / mid) , unit * sin(Pi / mid)) ;int R = (mid << 1) ;for(int j = 0 ; j < digital ; j += R) {Complex w (1 , 0) ;for(int k = 0 ; k < mid ; k ++ , w = w * W) {Complex x = A[j + k] , y = w * A[j + k + mid] ;A[j + k] = x + y ; A[j + k + mid] = x - y ;}}}
}
inline void Solve() {while(digital <= n + n) digital <<= 1 , ++l ;for(int i = 0 ; i < digital ; i ++)r[i] = (r[i>>1]>>1) | ((i&1)<<(l - 1)) ;FFT(a , 1) ; FFT(b , 1) ;for(int i = 0 ; i <= digital ; i ++) a[i] = a[i] * b[i] ;FFT(a , -1) ;
}
int main() {scanf("%d",&n) ;for(int i = 1 ; i <= n ; i ++) scanf("%lf",&q[i]) ;for(int i = 1 ; i <= n ; i ++) {a[i].x = q[i] ;b[i].x = 1.0 / (1.0 * i * i) ;}Solve() ;for(int i = 1 ; i <= n ; i ++) fir[i] = a[i].x / ( 1.0 * digital );digital = 1 ; l = 0 ;memset(a , 0 , sizeof(a)) ; memset(b , 0 , sizeof(b)) ;for(int i = 1 ; i <= (n>>1) ; i ++) swap(q[i] , q[n - i + 1]) ;for(int i = 1 ; i <= n ; i ++) {a[i].x = q[i] ;b[i].x = 1.0/(1.0 * i * i) ;}Solve() ;for(int i = 1 ; i <= n ; i ++) sec[i] = a[n - i + 1].x / ( 1.0 * digital );for(int i = 1 ; i <= n ; i ++) printf("%.8lf\n",fir[i] - sec[i]) ;return 0 ;
}

转载于:https://www.cnblogs.com/beretty/p/9520635.html

[ZJOI2014]力相关推荐

  1. BZOJ3527: [Zjoi2014]力

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

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

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

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

  4. P3338 [ZJOI2014]力

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

  5. P3338 [ZJOI2014]力 [FFT]

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

  6. [卷积系列] 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} ...

  7. 【BZOJ 3527】 [Zjoi2014]力

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

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

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

  9. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...

  10. BZOJ3527:[ZJOI2014]力(FFT)

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

最新文章

  1. 基于Java的RDMA高性能通信库(一):IBM jVerbs库
  2. Python语法点滴
  3. JS:javaweb——a标签实现跳转并打开新窗口
  4. C++和Java中类继承同名函数的区分
  5. Shiro学习(15)单点登录
  6. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)
  7. Windows To Ghost系统封装之必备软件集 - 好压
  8. java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作
  9. k8s一个容器多个镜像_从零开始学K8s: 6.运行一个简单的容器
  10. 三分钟学会使用Pytorch.scatter函数
  11. 疑似APT组织响尾蛇的JavaScript脚本调试分析
  12. python新浪微博爬虫_scrapy实现新浪微博爬虫
  13. C#汉字转拼音的实现方法
  14. 解析力 (1 )MTF SFR
  15. 417,BFS和DFS两种方式求岛屿的最大面积
  16. 在codesys中通过EtherCAT总线驱动IO模块
  17. 哈尔滨工业大学考研试题泄密了?官方通报:不存在
  18. Rainbow portal 研究
  19. 初学Java常用设计模式之——单例模式
  20. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较

热门文章

  1. django的 信号
  2. (转)linux口令相关文件(/etc/passwd和/etc/shadow)
  3. 全面解析Oracle等待事件的分类、发现及优化
  4. YouTube架构学习
  5. proxool,好东西
  6. 软测基础相关知识回顾
  7. python中os模块的常用
  8. SQL server脚本语句积累
  9. Jsoncpp 使用方法大全
  10. javaWEB知识总结——Ajax和Json