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}\)
Sol
FFT.
我们可以发现他是一个卷积的形式,每次从\(i^2\) 卷到 \((n-i-1)^2\) .
既然是卷积,那么直接FFT就好了,但是FFT是让指数相等,也就是这里面的下标相等,所以必须要翻转这两个数组其中一个就可以了,随便翻就行.
然后从某一个下下标位置开始输出.
Code
/**************************************************************
Problem: 3527
User: BeiYu
Language: C++
Result: Accepted
Time:2696 ms
Memory:24732 kb
****************************************************************/ #include <bits/stdc++.h>
using namespace std; #define mpr make_pair
#define rr first
#define ii second
const int N = 5e5+50;
const double Pi = M_PI;
typedef pair< double,double > Complex; Complex operator + (const Complex &a,const Complex &b) {
return mpr(a.rr+b.rr,a.ii+b.ii);
}
Complex operator - (const Complex &a,const Complex &b) {
return mpr(a.rr-b.rr,a.ii-b.ii);
}
Complex operator * (const Complex &a,const Complex &b) {
return mpr(a.rr*b.rr-a.ii*b.ii,a.rr*b.ii+a.ii*b.rr);
} int n,m;
Complex a[N],b[N],c[N]; void init(int x) {
for(n=1,m=0;n<x;n<<=1,m++);
m++,n<<=1;
}
void Rev(Complex a[]) {
for(int i=0,j=0,k;i<n;i++) {
if(i>j) swap(a[i],a[j]);
for(k=n>>1;(j^=k)<k;k>>=1);
}
}
void DFT(Complex y[],int r) {
Rev(y);
for(int i=2;i<=n;i<<=1) {
Complex wi=mpr(cos(2.0*Pi/i),r*sin(2.0*Pi/i));
for(int k=0;k<n;k+=i) {
Complex w=mpr(1.0,0.0);
for(int j=k;j<k+i/2;j++) {
Complex t1=y[j],t2=w*y[j+i/2];
y[j]=t1+t2,y[j+i/2]=t1-t2;
w=w*wi;
}
}
}if(r==-1) for(int i=0;i<n;i++) y[i].rr/=n;
}
void FFT(Complex a[],Complex b[],Complex c[]) {
DFT(a,1);DFT(b,1);
for(int i=0;i<n;i++) c[i]=a[i]*b[i];
DFT(c,-1);
}
int main() {
// freopen("in.in","r",stdin);
int l;
scanf("%d",&l);
for(int i=0;i<l;i++) scanf("%lf",&a[i].rr);
for(int i=0;i<l-1;i++) {
b[i]=mpr(1.0/(l-i-1.0)/(l-i-1.0),0.0);
b[2*l-1-i-1]=mpr(-1.0/(l-i-1.0)/(l-i-1.0),0.0);
}
init(l);
// for(int i=0;i<n;i++) cout<<b[i].rr<<" ";cout<<endl;
// for(int i=0;i<n;i++) cout<<a[i].rr<<" ";cout<<endl;
// reverse(a,a+l);
reverse(b,b+2*l-1);
// reverse(b,b+n);
// for(int i=0;i<n;i++) cout<<b[i].rr<<" ";cout<<endl;
// for(int i=0;i<n;i++) cout<<a[i].rr<<" ";cout<<endl;
FFT(a,b,c);
// for(int i=0;i<n;i++) printf("%lf\n",c[i].rr);
for(int i=l-1;i<2*l-1;i++) printf("%lf\n",c[i].rr);
return 0;
}
/*
5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880
*/
BZOJ 3527: [Zjoi2014]力的更多相关文章
- 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 ...
- bzoj 3527: [Zjoi2014]力 快速傅里叶变换
题意: 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. fft的那一堆东西还是背不到啊...这次写虽说完全自己写的,但是还是在参见了以前fft程序的情况下调了很久,主要在如下几点 ...
- 数学(FFT):BZOJ 3527 [Zjoi2014]力
题目在这里:http://wenku.baidu.com/link?url=X4j8NM14MMYo8Q7uPE7-7GjO2_TXnMFA2azEbBh4pDf7HCENM3-hPEl4mzoe2w ...
- BZOJ 3527: [Zjoi2014]力(FFT)
我们看一下这个函数,很容易就把他化为 E=sigma(aj/(i-j)/(i-j))(i>j)-sigma(aj/(i-j)/(i-j))(j>i) 把它拆成两半,可以发现分子与分母下标相 ...
- 【刷题】BZOJ 3527 [Zjoi2014]力
Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...
- bzoj 3527: [Zjoi2014]力 快速傅里叶变换 FFT
题目大意: 给出n个数\(q_i\)定义 \[f_i = \sum_{i<j}{\frac{q_iq_j}{(i-j)^2}} - \sum_{i>j}\frac{q_iq_j}{(i-j ...
随机推荐
- django自带加密模块的使用
首先,引入模块: 代码如下 复制代码 >>> from django.contrib.auth.hashers import make_password, check_passwo ...
- springmvc:jsp fmt标签格式化Date时间,格式化后可以用于页面展示
java后台的对象时间参数是date类型,在前端想格式化,又是放在input输入框中的 先引入jstl标签库 <%@taglib uri="http://java.sun.com/js ...
- [HTML5] ArrayBuffer与类型化数组
写在前面 这是关于JS二进制操作的第三篇博客,前两篇详见: [HTML5] Blob对象 [HTML5] FileReader对象 此前从宏观角度介绍了如何通过JS创建一个二进制对象,并介绍了如何将本 ...
- C# http请求数据
http中get和post请求的最大区别:get是通过URL传递表单值,post传递的表单值是隐藏到 http报文体中 http以get方式请求数据 /// <summary> /// g ...
- ajax实现局部刷新
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- 很不错的Intent用法 适用于正在开发的伙伴。自己看到了,也分享给大家吧。
本文介绍Android中Intent的各种常见作用. 1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开 ...
- Xcode 运行程序,左侧memory 不显示内存
运行程序后,xcode 不显示当前使用的内存情况,问题是打开了僵尸--enable zoombie Objects,关闭即可 打开 product--->SCheme-->EditSChe ...
- CSS实例练习
蓝色导航为图片,用background-image实现. 排版用到ul,li标签,下划线运用border-bottom中的dashed,右边文字用到CSS浮动float. 实例: 代码: <!D ...
- my computer
把08年买的电脑换了,自己买的配件装的,狂拽酷炫叼炸天. 配置清单: CPU :英特尔至强E3-1230 V2 主板 :华硕P8Z77-V LX LX2 机箱 :撒哈拉海盗贼王Z6游戏机箱(白色限量版 ...
- django缓存优化中caches参数如何配置?
在python开发中,如果运营django进行编写,为了提升效率,常常需要优化缓存,缓存优化中必须掌握的caches参数相关知识: CACHES 配置参数概述 - 格式 CACHES 字典配置格式如下 ...