BZOJ3527 力
题目
给出n个数qi,给出Fj的定义如下:
令Ei=Fi/qi,求Ei.
思路
年轻人的第一道FFT。
\[ E_j=\sum_{i<j}\frac{q_i}{(i-j)^2}-\sum_{i>j}\frac{q_i}{(i-j)^2} \]
设:
\[ f[i]=q_i\\ g[i]=\frac{1}{i^2} \]
那么原式可以化为:
\[ E_j=\sum_{i<j}f[i]g[j-i]-\sum_{i>j}f[i]g[i-j] \]
也就是:
\[ E_j=\sum_{i=0}^{j-1}f[i]g[j-i]-\sum_{i=j+1}^{n}f[i]g[i-j] \]
前半部分是卷积的形式,显然可以用FFT维护,重点是后面的部分。
我们来变一下形:
\[ \sum_{i=j+1}^{n}f[i]g[i-j]\\ 令i=i-j\\ \sum_{i=0}^{n-j}f[i+j]g[i] \]
然后将\(i+j+i\)凑成\(n-j\),也就是令\(f'[n-j-i]=f[i+j]\)
再简单变形:\(f'[i]=f[n-i]\)
于是\(f'[]\)也构造出来了,这样两边都化为了卷积的形式,就可以用FFT求解了。
代码
#include<bits/stdc++.h>
#define M 400005
using namespace std;
int n;
struct Complex{double x,y;Complex(){}Complex(double _x,double _y):x(_x),y(_y){}Complex operator + (const Complex &res) const{return (Complex){x+res.x,y+res.y}; }Complex operator - (const Complex &res) const{return (Complex){x-res.x,y-res.y}; }Complex operator * (const Complex &res) const{return (Complex){x*res.x-y*res.y,x*res.y+y*res.x}; }
};
Complex A[M],B[M];
double pi=acos(-1.0);
void FFT(Complex *y,int n,int f){if(n==1)return;Complex L[n>>1],R[n>>1];for(int i=0;i<n;i+=2)L[i>>1]=y[i],R[i>>1]=y[i+1];FFT(L,n>>1,f);FFT(R,n>>1,f);Complex wn(cos(2*pi/n),f*sin(2*pi/n)),w(1,0);for(int i=0;i<(n>>1);i++,w=w*wn){y[i]=L[i]+w*R[i];y[i+(n>>1)]=L[i]-w*R[i];}
}
double q[M],b[M],C[M];
int main(){cin>>n;n--;for(int i=0;i<=n;i++)scanf("%lf",&q[i]);for(int i=0;i<=n;i++)A[i]=(Complex){q[i],0};for(int i=1;i<=n;i++){b[i]=1.0/i/i;B[i]=Complex(b[i],0);}int nn=n,mm=n;mm+=nn;for(nn=1;nn<=mm;nn<<=1);FFT(A,nn,1);FFT(B,nn,1);for(int i=0;i<=nn;i++)A[i]=A[i]*B[i];FFT(A,nn,-1);for(int i=0;i<=n;i++)C[i]=A[i].x/nn;for(int i=0;i<=nn;i++)A[i]=B[i]=Complex(0,0);for(int i=0;i<=n;i++)A[i]=Complex(q[n-i],0);for(int i=1;i<=n;i++)B[i]=Complex(b[i],0);FFT(A,nn,1);FFT(B,nn,1);for(int i=0;i<=nn;i++)A[i]=A[i]*B[i];FFT(A,nn,-1);for(int i=0;i<=n;i++)C[i]-=A[n-i].x/nn;for(int i=0;i<=n;i++)printf("%.3f\n",C[i]);return 0;
}
转载于:https://www.cnblogs.com/zryabc/p/10492207.html
BZOJ3527 力相关推荐
- BZOJ3527: [Zjoi2014]力
BZOJ3527: [Zjoi2014]力 Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行 ...
- [bzoj3527][Zjoi2014]力
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定n(n<=100000)个数qi 求Ei=Fi/qi 题解:首先约去所有的qi,然后就是一个卷积了,Ai=qi,Bi=1/i^2搞一 ...
- 【BZOJ3527】【ZJOI2014】力
"FFT还不是随手写?"我终于能说这样的话了இwஇ 原题: 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. FFT嘛,直接推公式 然后就变成俩卷积了,FFT即可 ...
- BZOJ3527:[ZJOI2014]力(FFT)
Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...
- BZOJ3527: [Zjoi2014]力 [FFT]
化简之后,发现减号左边的式子是一个卷积.右边的式子,把一个函数倒序就是卷积,分别FFT,求解答案. 大佬blog: https://blog.csdn.net/kyleyoung_ymj/articl ...
- bzoj3527: [Zjoi2014]力 fft
题意:求\(E_i=\sum_{j=1}^{i-1}qj/{(i-j)^2}-\sum_{j=i+1}^{n}qj/{(i-j)^2}\) 题解:构造前几个Ei,可以发现\(E_i=a_i*b_{j- ...
- bzoj3527【ZJOI2014】力
题目大意: 给出n个数qi,定义 Fj为 令 Ei=Fi/qi,求Ei. 令a[i]=q[i],b[i]=1/(i^2),则E[i]=∑(1≤j≤i-1)a[j]*b[i-j]-∑(i+1≤j≤n)a ...
- 【BZOJ3527】【FFT】力
[问题描述] 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi.试求Ei. [输入格式] 输入文件force.in包含一个整数n,接下来n行每行输入一个数,第i行表示qi. [输出格式] 输出 ...
- 【ZJOI2014】【BZOJ3527】 力 (FFT)
Description 给出序列 {qi} \{q_i\},求 Ei=∑j<iqj(i−j)2−∑j>iqj(i−j)2 E_i = \sum_{ji}\frac{q_j}{(i-j)^2 ...
最新文章
- Arduino 各种模块篇 光敏感应器 简易光敏
- 【分块答案】【最小割】bzoj1532 [POI2005]Kos-Dicing
- 2020年高等数学方法与提高(上海理工大学)学习笔记:无穷级数
- virtualbox linux 挂载u盘,Ubuntu 10.04 在Virtualbox 虚拟机上挂载U盘
- SUV 个人收藏汽车
- 使用ctime.h头文件来控制程序延时秒数
- CVPR 2020文本图像检测与识别论文/代码
- 五分钟带你玩转rabbitmq(八)【真实案例】消息消费失败如何处理?
- sqlserver中日期转字符串
- 预应力内力计算时作用机理(纠结好久的问题orz)
- php读取月日,PHP获取当前时间、年份、月份、日期和天数
- qq音乐网络异常获取音乐失败_QQ音乐怎么诊断网络异常
- ubuntu 18.04 解决网易云音乐图标不能打开的问题
- win7下电脑感染了病毒
- MYSQL窗口函数用法
- 2022跨境电商是宝还是坑-成都扬帆跨境电商
- python绘制箱线图
- java qt gui_GUI(图形界面)技术选型
- CSS3 @font-face实现颜色大小可控的三角效果——张鑫旭
- 省联社再下一城,陕西信合选择携手菊风共建远程银行服务平台