【洛谷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 ...
随机推荐
- ES6的对象属性简写
在ES6中允许我们在设置一个对象的属性的时候不指定属性名. 不使用ES6: const name='Ming', age='18', city='Shanghai'; const student ={ ...
- 【工具】rinetd 使用教程(linux 下的端口转发工具 )
日期:2019-07-30 20:00:36 更新: 作者:Bay0net 介绍:使用 rinetd 来转发某端口的流量. 0x01. 安装 官网 RINETD 安装方法很简单,一条语句就 OK 了. ...
- 使用pthread下的mutex与cond_var模拟windows下的event几个接口
两个版本的链接: https://github.com/neosmart/pevents https://github.com/moya-lang/Event 第一个版本能够模拟等待多个事件中的一个触 ...
- JavaScript权威指南(第六版) 初读笔记
JavaScript的5种原始类型:undefined.null.布尔值.数字和字符串. JavaScript中两个非常重要的数据类型是对象和数组. 通过方括号定义数组元素和通过花括号定义对象属性名和 ...
- APP Store上架QA&注意事项
一. App Store上架费用,要多少钱. 这个因产品而异,一般是6000-10000元人民币. 二. App Store上架周期,要多久过. 这个因产品而异,正常的话一周内,如果产品老是出问题,被 ...
- CentOS安装Netdata进行系统监控
偶然间在知乎看到了Netdata这个东西 看到它华丽的界面 顿时心动 gkd gkd #准备 yum install autoconf automake curl gcc git libmnl-dev ...
- 小记---------网页采集之selenium
1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素 ...
- springboot处理单个文件上传
1. 引入pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</gro ...
- PHP post调接口代码
PHP post调接口代码 /** * $url:接口地址 * $data:数组参数 **/ function postData($url, $data) { $ch = curl_init (); ...
- 【测试环境】TCPCopy 使用方法
https://blog.csdn.net/ronmy/article/details/65657691 TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线请求导入到测试系 ...