[bzoj3527][Zjoi2014]力_FFT
力 bzoj-3527 Zjoi-2014
题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\limits_{i>j}\frac{q_iq_j}{(i-j)^2}$。求所有的$E_i=\frac{F_i}{q_i}$。
注释:$1\le n\le 10^5$,$0\le q\le 10^9$。
想法:我们可以把$F_i$中每一项上的$q_i$删掉因为我们求得$E_i$除掉了。
进而我们考虑如何求解$F$。
先看$j<i$的部分
$F_i=\sum\limits_{j=0}^{i-1} \frac{q_j}{(i-j)^2}$。
设$p(x)=\frac{1}{x^2}$。
所以$F_i=\sum\limits_{j=0}^{i-1} q_j\cdot p_{i-j}$。
紧接着我们强制令$p_0=0$,$F_i=\sum\limits_{j=0}^i q_j\cdot p_{i-j}$,可以用$FFT$加速。
接下来看$i<j$的部分。
此时$F_i=\sum\limits_{j=i+1}^{n-1} q_j\cdot p_{j-i}$。
像bzoj2194一样,这时我们将$p$序列翻转,仍然可以用$FFT$加速。
之后把这两部分加一起即可。
Code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 100010
using namespace std; typedef double db;
const db pi=acos(-1);
db E[N<<2],q[N<<2],p[N<<2];
struct cp
{
db x,y;
cp() {x=y=0;}
cp(db x_,db y_) {x=x_,y=y_;}
cp operator + (const cp &a) const {return cp(x+a.x,y+a.y);}
cp operator - (const cp &a) const {return cp(x-a.x,y-a.y);}
cp operator * (const cp &a) const {return cp(x*a.x-y*a.y,x*a.y+y*a.x);}
}a[N<<2],b[N<<2],c[N<<2],d[N<<2];
void fft(cp *a,int len,int flg)
{
int i,j,k,t;
cp tmp,w,wn;
for(i=k=0;i<len;i++)
{
if(i>k) swap(a[i],a[k]);
for(j=len>>1;(k^=j)<j;j>>=1);
}
for(k=2;k<=len;k<<=1)
{
wn=cp(cos(2*pi*flg/k),sin(2*pi*flg/k));
t=k>>1;
for(i=0;i<len;i+=k)
{
w=cp(1,0);
for(j=i;j<i+t;j++)
{
tmp=a[j+t]*w;
a[j+t]=a[j]-tmp;
a[j]=a[j]+tmp;
w=w*wn;
}
}
}
if(flg==-1) for(i=0;i<len;i++) a[i].x/=len;
}
int main()
{
int n; cin >> n ; for(int i=0;i<n;i++) scanf("%lf",&q[i]);
for(int i=1;i<=n;i++) p[i]=(double)(1)/(1ll*i*i); p[0]=0;
for(int i=0;i<n;i++) a[i].x=c[i].x=q[i];
for(int i=0;i<n;i++) b[i].x=d[n-i-1].x=p[i];
int len=1; while(len<=(n<<1)) len<<=1;
fft(a,len,1); fft(b,len,1);
for(int i=0;i<len;i++) a[i]=a[i]*b[i];
fft(a,len,-1);
for(int i=0;i<n;i++) E[i]=a[i].x;
fft(c,len,1); fft(d,len,1);
for(int i=0;i<len;i++) c[i]=c[i]*d[i];
fft(c,len,-1);
for(int i=0;i<n;i++) E[i]-=c[n+i-1].x;
for(int i=0;i<n;i++) printf("%.3lf\n",E[i]);
return 0;
}
小结:对于这两种形式可以用$FFT$加速应该熟练掌握。
[bzoj3527][Zjoi2014]力_FFT的更多相关文章
- bzoj3527: [Zjoi2014]力 fft
bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...
- bzoj3527: [Zjoi2014]力
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ3527[Zjoi2014]力——FFT
题目描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi<100000 ...
- bzoj3527: [Zjoi2014]力 卷积+FFT
先写个简要题解:本来去桂林前就想速成一下FFT的,结果一直没有速成成功,然后这几天断断续续看了下,感觉可以写一个简单一点的题了,于是就拿这个题来写,之前式子看着别人的题解都不太推的对,然后早上6点多推 ...
- 2019.02.28 bzoj3527: [Zjoi2014]力(fft)
传送门 fftfftfft菜题. 题意简述:给一个数列aia_iai,对于i=1→ni=1\rightarrow ni=1→n求出ansi=∑i<jai(i−j)2−∑i>jai(i−j ...
- BZOJ3527 [Zjoi2014]力 【fft】
题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...
- bzoj千题计划167:bzoj3527: [Zjoi2014]力
http://www.lydsy.com/JudgeOnline/problem.php?id=3527 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 以n=4为例: ...
- [BZOJ3527][ZJOI2014]力 FFT+数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们 ...
- [BZOJ3527][ZJOI2014]力:FFT
分析 整理得下式: \[E_i=\sum_{j<i}{\frac{q_i}{(i-j)^2}}-\sum_{j>i}{\frac{q_i}{(i-j)^2}}\] 假设\(n=5\),考虑 ...
随机推荐
- WPF学习11:基于MVVM Light 制作图形编辑工具(2)
本文是WPF学习10:基于MVVM Light 制作图形编辑工具(1)的后续 这一次的目标是完成 两个任务. 画布 效果: 画布上,选择的方案是:直接以Image作为画布,使用RenderTarget ...
- CF915C Permute Digits
思路: 从左到右贪心放置数字,要注意判断这个数字能否放置在当前位. 实现: #include <bits/stdc++.h> using namespace std; typedef lo ...
- Unity笔记(4)自学第六天
今天主要是写了demo的策划案 [关卡设计部分]: [关卡数值设计]:
- web安全后渗透--XSS平台搭建及使用
xss平台搭建 1.申请一个云主机来进行建站:149.28.xx.xx 2.安装lnmp: wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO ln ...
- mysql 判断null 和 空字符串
1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...
- 【译】x86程序员手册37-第10章 初始化
Chapter 10 Initialization 第10章 初始化 After a signal on the RESET pin, certain registers of the 80386 a ...
- python学习第三次
while循环 表示当条件成立的时候就循环适用于不知道具体循环次数,但是确定在某个条件成立的情况下就循环while语法:while 条件表达式:语句块#另一种表达方式while 条件表达式:语句块1e ...
- CREATE TABLE - 定义一个新表
SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( { column_name data_ty ...
- delphi byte to of set
最佳方案 type // Controls.TCMMouseWheel relies on TShiftState not exceeding 2 bytes in size TShiftState ...
- VIM命令大全(图+文)
在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使 ...