【洛谷P3338】力
题目大意:求
\]
题解:可以发现,这个和式隐藏着卷积的形式,即:设 \(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】力的更多相关文章
- 洛谷P3338 力
题意: 解: 介绍两种方法. 首先可以把那个最后除的qi拆掉. ①分前后两部分处理. 前一部分可以看做是个卷积.下面的平方不拆开,直接看成gi-j即可. 后一部分按照套路,把循环变量改成从0开始,反转 ...
- 洛谷 [P3338] 力
FFT \[E_i = F_i / q_i = \sum_{i<j} \frac {q_j} {(i - j)^2} - \sum _{ i > j} \frac{q _ j} {(i - ...
- [洛谷P3338] [ZJOI2014]力
洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ...
- 洛谷 P3338 [ZJOI2014]力 解题报告
P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...
- 【洛谷 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]= ...
- 洛谷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}$ ...
- 洛谷 P3338 [ZJOI2014]力
题意简述 读入\(n\)个数\(q_i\) 设\(F_j = \sum\limits_{i<j}\frac{q_i\times q_j}{(i-j)^2 }-\sum\limits_{i> ...
- [bzoj3527] [洛谷P3338] [Zjoi2014]力
Description 给出n个数qi,给出Fj的定义如下: \[ F_j=\sum\limits_{i<j} \frac{q_iq_j}{(i-j)^2} - \sum\limits_{i&g ...
- 「洛谷3338」「ZJOI2014」力【FFT】
题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...
随机推荐
- 【DVWA】Command Injection(命令注入)通关教程
日期:2019-08-01 16:05:34 更新: 作者:Bay0net 介绍:利用命令注入,来复习了一下绕过过滤的方法,还可以写一个字典来 fuzz 命令注入的点. 0x01. 漏洞介绍 仅仅需要 ...
- Python学习之==>条件判断
1.单条件判断 # 接收输入的值,使用input函数,用input接收输入的值都是string类型的 age = input('请输入你的年龄:') age = int(age) # 类型转换,转换成 ...
- Tlbimp 生成c#互操作com组件dll;Tlbimp 生成.net互操作com组件dll
Tlbimp 生成c#互操作com组件dll vs开发人员命令提示>进入到com组件目录>Tlbimp com.dll
- 【ABAP系列】SAP ABAP7.40新语法简介第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
- json,异步加载,时间线
JSON是一种传输数据的格式 JSON.stringify(obj); obj--string JSON.parse(str); string-->obj
- java中String中的endsWith()方法
解释:endsWith() ——此方法测试字符串是否以指定的后缀 suffix 结束. 此方法的定义:public boolean endsWith(String suffix) 我这里判断的是路径是 ...
- ${pagecontext.request.contextpath}绝对路径理解
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> .也就是取出部署的应用程序 ...
- SheetJS js-xlsx 的使用, exceljs
js-xlsx 官方文档:https://sheetjs.gitbooks.io/docs/#sheetjs-js-xlsx npm xlsx地址:https://www.npmjs.com/pack ...
- ArrayList(顺序表)和LinkedList(链表)的区别联系,优劣取舍问题
ArrayList和LinkedList都是List接口的实现类.主要区别如下: 最主要的区别是底层的数据结构不同: 1)ArrayList相当于一个动态数组,需要随机访问列表中的元素时,ArrayL ...
- 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法
按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...