题目大意:求

\[E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}}
\]

题解:可以发现,这个和式隐藏着卷积的形式,即:设 \(f(i)={1\over i^2}\),\(g(i)=q_i\),则以上和式可以表示成 $$\sum\limits_{i=0}^j g(i)f(j-i)$$,$$\sum\limits_{i=j}^{n-1}g(i)f(i-j)$$,令 \(f(0)=0\) 即可让 j 这一项也参与运算。发现上面的和式直接就是一个卷积的计算,对于下面的和式来说,发现 f 和 g 的差是定值,这里采用将 g 翻转成 g‘,则原式变成$$\sum\limits_{i=j}^{n-1}g'(n-i-1)f(i-j)$$可以发现,下标的和成为了定值,在对求和指标进行换元之后,也成为了一个卷积。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=4e5+10;
const double pi=acos(-1); int n,m;
struct cp{
double x,y;
cp(double xx=0,double yy=0):x(xx),y(yy){}
friend cp operator+(const cp &a,const cp &b){return cp(a.x+b.x,a.y+b.y);}
friend cp operator-(const cp &a,const cp &b){return cp(a.x-b.x,a.y-b.y);}
friend cp operator*(const cp &a,const cp &b){return cp(a.x*b.x-a.y*b.y,a.y*b.x+b.y*a.x);}
}a[maxn],b[maxn],c[maxn];
int tot=1,bit,rev[maxn]; void read_and_parse(){
scanf("%d",&n),m=2*n-2;
for(int i=0;i<n;i++)scanf("%lf",&a[i].x),b[n-1-i].x=a[i].x;
for(int i=1;i<n;i++)c[i].x=1.0/i/i;
while(tot<=m)tot<<=1,++bit;
for(int i=0;i<tot;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<(bit-1));
} void fft(cp *t,int type){
for(int i=0;i<tot;i++)if(i<rev[i])swap(t[i],t[rev[i]]);
for(int mid=1;mid<tot;mid<<=1){
cp wn(cos(pi/mid),type*sin(pi/mid));
for(int j=0;j<tot;j+=(mid<<1)){
cp w(1,0);
for(int k=0;k<mid;k++,w=w*wn){
cp x=t[j+k],y=w*t[j+mid+k];
t[j+k]=x+y,t[j+mid+k]=x-y;
}
}
}
if(type==-1)for(int i=0;i<tot;i++)t[i].x/=tot;
} void solve(){
fft(a,1),fft(b,1),fft(c,1);
for(int i=0;i<tot;i++)a[i]=a[i]*c[i],b[i]=b[i]*c[i];
fft(a,-1),fft(b,-1);
for(int i=0;i<n;i++)printf("%.3lf\n",a[i].x-b[n-1-i].x);
} int main(){
read_and_parse();
solve();
return 0;
}

【洛谷P3338】力的更多相关文章

  1. 洛谷P3338 力

    题意: 解: 介绍两种方法. 首先可以把那个最后除的qi拆掉. ①分前后两部分处理. 前一部分可以看做是个卷积.下面的平方不拆开,直接看成gi-j即可. 后一部分按照套路,把循环变量改成从0开始,反转 ...

  2. 洛谷 [P3338] 力

    FFT \[E_i = F_i / q_i = \sum_{i<j} \frac {q_j} {(i - j)^2} - \sum _{ i > j} \frac{q _ j} {(i - ...

  3. [洛谷P3338] [ZJOI2014]力

    洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ...

  4. 洛谷 P3338 [ZJOI2014]力 解题报告

    P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...

  5. 【洛谷 P3338】 [ZJOI2014]力(FFT)

    题目链接 \[\Huge{E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^{n}\frac{q_j}{(i-j)^2}}\] 设\(A[i]= ...

  6. 洛谷P3338 [ZJOI2014]力(FFT)

    传送门 题目要求$$E_i=\frac{F_i}{q_i}=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(j-i)^2}$ ...

  7. 洛谷 P3338 [ZJOI2014]力

    题意简述 读入\(n\)个数\(q_i\) 设\(F_j = \sum\limits_{i<j}\frac{q_i\times q_j}{(i-j)^2 }-\sum\limits_{i> ...

  8. [bzoj3527] [洛谷P3338] [Zjoi2014]力

    Description 给出n个数qi,给出Fj的定义如下: \[ F_j=\sum\limits_{i<j} \frac{q_iq_j}{(i-j)^2} - \sum\limits_{i&g ...

  9. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

随机推荐

  1. nodejs之路由

    声明:在写nodejs代码的时候,很多模块可以封装保存起来,以后的项目都会用到. 1.路由模块 var url=require('url'); //封装方法改变res 绑定res.send() fun ...

  2. 阶段3 2.Spring_01.Spring框架简介_05.spring的优势

  3. Netflix颠覆HR:我们只雇“成年人”

    员工的最佳福利,是与优秀者一起工作 ● Patty McCord / 文 李钊/译 担任Netflix的首席人才官时,我与CEO里德·黑斯廷斯一起做了一份127页的PPT,命名为<自由& ...

  4. squid代理使用yum源

    参考文档:https://blog.csdn.net/tuolaji8/article/details/73613859https://www.centos.bz/2017/10/centos-7%E ...

  5. VirtualBox-5.2.8-121009-Win,虚拟机指令ifconfig不显示ip解决方法

  6. Android的消息机制之ThreadLocal的工作原理

    ThreadLocal 可以把一个对象保存在指定的线程中,对象保存后,只能在指定线程中获取保存的数据,对于其他线程来说则无法获取到数据. 日常开发中 ThreadLocal 使用的地方比较少,但是系统 ...

  7. python学习之数据类型(List)

    3.5 列表 3.5.1 列表的介绍 ​ 列表是python的基础数据类型之⼀,其他编程语言也有类似的数据类型. 比如JS中的数组, java中的数组等等.它是以[ ]括起来, 每个元素⽤' , '隔 ...

  8. 常用ARM指令

    常用ARM指令1:数据处理指令   mov mvn MOV(MOVE)指令可完成从另一个寄存器.被移位的寄存器或将一个立即数加载到目的寄存器 MOV R0,R1;R1的值传到R0 MOV R3,#3 ...

  9. 关于liunx 机器脱机环境(netcore)Nuget包迁移的问题

    首先nuget脱机环境是没办法加载第三方nuget包的,我这里的做法是使用nuget缓存文件(正确的做法还是推荐使用自己搭建的nuget服务器然后正常发布,这里只是做应急之需) 我们都知道项目的dot ...

  10. 开启sentry权限控制hue

    参考: cloudera官方授权:包括webui, ldap,sentry https://www.cloudera.com/documentation/enterprise/6/6.2/topics ...