[BZOJ]3527 力(ZJOI2014)
第一次背出FFT模板,在此mark一道裸题。
Description
给出n个数qi,给出Fj的定义如下:

令Ei=Fi/qi,求Ei。
Input
Output
n行,第i行输出Ei。与标准答案误差不超过1e-2即可。
Sample Input
5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880
Sample Output
-16838672.693
3439.793
7509018.566
4595686.886
10903040.872
HINT
n ≤ 100000,0 < qi < 1000000000。
Solution
看到题目中 下标为j的项等于下标为i的项与下标为j±i的项的乘积之和,你应该会有所感觉吧。
设
,那么
。
显然两边都是卷积的式子,所以两边分别做一次FFT就可以了。
然而我们再思考一下,发现两边的式子是可以合并的:
设
,那么
就完全成立了。只要做一次FFT就够了。
时间复杂度O(nlogn)。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define pi acos(-1)
#define MN 263005
using namespace std;
struct cp
{
double v,i;
friend cp operator+(const cp& a,const cp& b) {return (cp){a.v+b.v,a.i+b.i};}
friend cp operator-(const cp& a,const cp& b) {return (cp){a.v-b.v,a.i-b.i};}
friend cp operator*(const cp& a,const cp& b) {return (cp){a.v*b.v-a.i*b.i,a.v*b.i+a.i*b.v};}
}w[][MN],A[MN],B[MN],C[MN];
double a[MN];
int r[MN];
int N,n; void init(int n)
{
register int i,j,k;
for (N=;N<=n;N<<=); cp g=(cp){cos(pi*/N),sin(pi*/N)};
for (i=j=;i<N;r[++i]=j)
for (k=N>>;(j^=k)<k;k>>=);
w[][]=w[][]=(cp){,};
for (i=;i<N;++i) w[][i]=w[][i-]*g;
for (i=;i<N;++i) w[][i]=w[][N-i];
} void FFT(cp* a,bool g)
{
register int i,j,k;
for (i=;i<N;++i) if (r[i]<i) swap(a[i],a[r[i]]);
for (i=;i<N;i<<=)
for (j=;j<N;j+=(i<<))
for (k=;k<i;++k)
{
cp x=a[i+j+k]*w[g][N/(i<<)*k];
a[i+j+k]=a[j+k]-x;
a[j+k]=a[j+k]+x;
}
if (g) for (i=;i<N;++i) a[i].v/=N,a[i].i/=N;
} int main()
{
register int i;
scanf("%d",&n);
for (i=;i<=n;++i) scanf("%lf",&a[i]),A[i].v=a[i];
for (i=;i<n;++i)
B[n+i].v=(double)/i/i,B[n-i].v=(double)-/i/i;
init(n<<);
FFT(A,); FFT(B,);
for (i=;i<N;++i) C[i]=A[i]*B[i];
FFT(C,);
for (i=;i<=n;++i) printf("%.7lf\n",C[n+i].v);
}
Last Word
推荐miskcoo的关于学习FFT的blog:从多项式乘法到快速傅里叶变换。
[BZOJ]3527 力(ZJOI2014)的更多相关文章
- BZOJ 3527 力 | FFT
BZOJ 3527 力 | 分治 题意 给出数组q,$E_i = \sum_{i < j} \frac{q_i}{(i - j) ^ 2} - \sum_{i > j} \frac{q_i ...
- BZOJ 3527 【ZJOI2014】 力
题目链接:力 听说这道题是\(FFT\)板子题,于是我就来写了…… 首先可以发现这个式子:\[E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}-\sum_{j>i}\fr ...
- BZOJ 3527 力
fft推下公式.注意两点: (1)数组从0开始以避免出错. (2)i*i爆long long #include<iostream> #include<cstdio> #incl ...
- 【BZOJ 3527】 3527: [Zjoi2014]力 (FFT)
3527: [Zjoi2014]力 Time Limit: 30 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 2003 Solved: 11 ...
- BZOJ 3527: [Zjoi2014]力
Description 求 \(E_i=\sum _{j=0}^{i-1} \frac {q_j} {(i-j)^2}-\sum _{j=i+1}^{n-1} \frac{q_j} {(i-j)^2} ...
- BZOJ 3527: [ZJOI2014]力(FFT)
BZOJ 3527: [ZJOI2014]力(FFT) 题意: 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下: \[F_j=\sum \limits _ {i < j} \fra ...
- ●BZOJ 3527 [Zjoi2014]力
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题解: FFT求卷积. $$\begin{aligned}E_i&=\frac ...
- bzoj 3527 [Zjoi2014]力——FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...
- bzoj 3527 [Zjoi2014] 力 —— FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 看了看TJ才推出来式子,还是不够熟练啊: TJ:https://blog.csdn.n ...
随机推荐
- Archlinux下i3wm与urxvt的配置
前段时间学习了GitHub的两位前辈:Airblader和wlh320.他们的相关教程在https://github.com/Airblader/i3和https://github.com/wlh32 ...
- mahony互补滤波器C编程
//gx...分别为重力加速度在三个轴向的分力 由加速度计测得 //ax...分别为角速度在三个轴向的角速度 由陀螺仪测得 //最后得到最终滤波完毕的x.y.z方向的角度值(°) void IMUup ...
- 亚马逊AWS学习——VPC里面几个概念的关系
VPC中涉及几个概念: VPC 子网 路由表 Internet网关 安全组 今天来讲讲这几个概念之间的关系. 1. VPC 说的就是VPC,当然VPC范围是最大的,VPC即virtual privat ...
- 一个CSS简单入门网站
讲的知识简单明了,很实用: http://zh.learnlayout.com/
- windows 7 netsh wlan命令连接wifi
显示本机保存的profiles,配置文件是以wifi的ssid命名的. netsh wlan show profiles 用netsh wlan connect name=00_1111 连接其中一个 ...
- rsync 自动创建目录的坑点
rsync同步文件有三种模式: 1.把源站路径下某个文件,同步到目标路径.例如rsync -aR /data/1/2/3/a.txt 1.1.1.1:/data/ ,目标机器将自动创建多层目录存放a. ...
- 用javascript做别踩白块游戏1
初学Javascript做的一个别踩白块小游戏,代码简陋,如下: <!DOCTYPE html> <html> <head> <!-- 禁用缩放功能 --&g ...
- C#配置文件config的使用
做程序的时候总会有一些参数,可能会调整,这时候一般情况下我都会写在配置文件里,这样方便一点. 配置文件的读取 <?xml version="1.0" encoding=&qu ...
- Python/ selectors模块及队列
Python/selectors模块及队列 selectors模块是可以实现IO多路复用机制: 它具有根据平台选出最佳的IO多路机制,比如在win的系统上他默认的是select模式而在linux上它默 ...
- mysql 练习题
导出现有数据库数据: C:\Users\Administrator>mysqldump -u root db1>D:\agon\db1.sql -p #结构+数据 mysqldump - ...