题目大意:求

\[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. Windows下C/C++内存泄露检测机制

    1.概述 在Windows下微软给我们提供了一个十分强大的C/C++运行时库,这个运行时库中包含了很多有用的功能.而众多强大功能之一就是内存泄露的检测. C/C++提供了强大的内存管理功能,不过随之而 ...

  2. PRISM 4 - RegisterViewWithRegion & Custom Export Attributes

    5down votefavorite   I am using Prism 4 with MEF Extensions and the MVVM pattern. During initializat ...

  3. 关于 if __name__ == '__main__':的使用

    当是用  if __name__ == '__main__': 时,下面调用函数只是在当前脚本调试, 而我们需要在别处导入这个脚本中的类或者函数时,这个if __name__ == '__main__ ...

  4. RTX修改标题logo方法

    摘要: 打开“腾讯通RTX管理器”→“配置向导”→“服务运行状态”→“停止所有服务”,退出“腾讯通RTX管理器”按照如下操作.①修改到期时间为:9999-12-300:0:0 用记事本打开“C:/Pr ...

  5. 关于img标签浏览器自带的边框,清除边框的解决方式(即img[src=""] img无路径情况下,灰色边框去除解决方法)

    详解img[src=""] img无路径情况下,灰色边框去除解决方法 1.Js解决办法 <html> <head> <meta charset=&qu ...

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

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

  7. flask 重定向详解

    from flask import Flask,request,redirect,url_for app = Flask(__name__) @app.route('/') def hello_wor ...

  8. Idea 竖选文本、竖向选择、横向纵向选择文本代码

    在使用Idea的时候,可能需要在相同类型的文字中增加数据,所以Idea提供一种列式选择方式,提高开发的效率. 如果需要使用,我们可以选中代码,右键单击,在弹出的菜单中选中[Column Selecti ...

  9. 常用邮件SMTP POP3服务器地址大全

    #阿里云邮箱(mail.aliyun.com): POP3服务器地址:pop3.aliyun.com(SSL加密端口:995:非加密端口:110) SMTP服务器地址:smtp.aliyun.com( ...

  10. Linux小技巧:du -sh * —— 查询文件目录大小

    du -ach * #这个能看到当前目录下的所有文件占用磁盘大小和总大小 du -sh #查看当前目录总大小 du -sh * #查看所有子目录大小 du -sh ./* #查看当前目录下所有文件/文 ...