我们看一下这个函数,很容易就把他化为 E=sigma(aj/(i-j)/(i-j))(i>j)-sigma(aj/(i-j)/(i-j))(j>i)

把它拆成两半,可以发现分子与分母下标相加总为i

也就是说,例如左边, 可以表示成g(x)= f(i)*F(x-i) (i<x) 也就是卷积了

可以轻易的构造出 f(i)= ai F(i)=1/i/i FFT就行了

右边的话,吧f(i)给倒过来就行了 (f(i)=an-i)

最后的答案 ansi=g(i)-G(n-i-1)

ok了

最近发现自己写环套树老写渣,找几道题来练练~~

CODE:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct com{ //自定义复数类
 double r,i;
 com(double real=0.0,double imag=0.0){
  r=real;i=imag;
 }
 com operator +(const com x){
  return com(x.r+r,x.i+i);
 }
 com operator -(const com x){
  return com(r-x.r,i-x.i);
 }
 com operator *(const com x){
  return com(x.r*r-x.i*i,r*x.i+i*x.r);
 }
};
#define maxn 400100 //答案的位数
#define pi acos(-1.0)
com a[maxn*2],b[maxn*2],c[maxn*2],d[maxn*2];;
bool bo[maxn*2];
int bitrec(com *x,int l){
 memset(bo,0,sizeof(bo));
 for (int i=1;i<l;i++){
  if (bo[i]) continue;
  int m=(int)log2(l)+0.5;
  int y=i,z=0;
  while (m--){
   z<<=1;
   z|=y&1;
   y>>=1;
  }
  bo[z]=bo[i]=1;
  swap(x[z],x[i]);
 }
 return 0;
}
int fft(com *x,int l,double o){
 bitrec(x,l);
 for (int i=2;i<=l;i<<=1){
  com w(cos(2.0*o*pi/i),sin(2.0*o*pi/i));
  for (int j=0;j<l;j+=i){
   com t(1.0,0.0);
   for (int k=j;k<j+(i>>1);k++){
    com u=x[k],v=x[k+(i>>1)]*t;
    x[k]=u+v;
    x[k+(i>>1)]=u-v;
    t=t*w;
   }
  }
 }
 if (o==-1) {
  for (int i=0;i<l;i++) x[i].r/=l;
 }
 return 0;
}
double x[maxn];
int main(){
 int n;
 scanf("%d",&n);int l=1;
 while (l<=n*2) l<<=1;
 for (int i=0;i<n;i++) {
  scanf("%lf",&x[i]);
  a[i]=com(x[i],0);
 }
 for (int i=n;i<l;i++) a[i]=com(0,0);
 for (int i=1;i<n;i++) b[i]=com(1.0/i/i,0);
 for (int i=n;i<l;i++) b[i]=com(0,0);
 b[0]=com(0,0);
 fft(a,l,1);
 fft(b,l,1);
 for (int i=0;i<l;i++) c[i]=a[i]*b[i];
 fft(c,l,-1);
 for (int i=0;i<n;i++) a[i]=com(x[n-i-1],0);
 for (int i=n;i<=l;i++) a[i]=com(0,0);
 fft(a,l,1);
 for (int i=0;i<l;i++) d[i]=a[i]*b[i];
 fft(d,l,-1);
 for (int i=0;i<n;i++) printf("%.3lf\n",(c[i].r-d[n-i-1].r));
 return 0;
}

BZOJ 3527: [Zjoi2014]力(FFT)的更多相关文章

  1. bzoj 3527 [Zjoi2014]力——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...

  2. bzoj 3527 [Zjoi2014] 力 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 看了看TJ才推出来式子,还是不够熟练啊: TJ:https://blog.csdn.n ...

  3. BZOJ 3527 [Zjoi2014]力 ——FFT

    [题目分析] FFT,构造数列进行卷积,挺裸的一道题目诶. 还是写起来并不顺手,再练. [代码] #include <cmath> #include <cstdio> #inc ...

  4. 【BZOJ】3527: [Zjoi2014]力 FFT

    [参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...

  5. ●BZOJ 3527 [Zjoi2014]力

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题解: FFT求卷积. $$\begin{aligned}E_i&=\frac ...

  6. BZOJ 3527: [ZJOI2014]力(FFT)

    BZOJ 3527: [ZJOI2014]力(FFT) 题意: 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下: \[F_j=\sum \limits _ {i < j} \fra ...

  7. 数学(FFT):BZOJ 3527 [Zjoi2014]力

    题目在这里:http://wenku.baidu.com/link?url=X4j8NM14MMYo8Q7uPE7-7GjO2_TXnMFA2azEbBh4pDf7HCENM3-hPEl4mzoe2w ...

  8. 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 ...

  9. bzoj 3527: [Zjoi2014]力【FFT】

    大力推公式,目标是转成卷积形式:\( C_i=\sum_{j=1}^{i}a_jb_{i-j} \) 首先下标从0开始存,n-- \[ F_i=\frac{\sum_{j<i}\frac{q_j ...

随机推荐

  1. python实现断点续传下载文件

    最近的任务里有一个功能是要我从日志服务器实时跟新日志到本地,日志在不断新增内容就需要我隔一段时间从上次下载的位置继续下载,并写入本地文件上次写完的位置后面. headers = {'Range': ' ...

  2. 在PHP语言中使用JSON

      目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它. 我写过一篇<数据类型和JSON格式>,探讨它的设计思想.今天,我想总结一下PHP语言对它的支持,这是开发 ...

  3. MySQL5.6-Tomcat7环境变量的配置

    一.MySQL环境变量配置(zip安装):系统-高级系统设置--环境变量--path添加D:\Mysql\bin 找到mysql解压目录下的my-default.ini文件修改 basedir = D ...

  4. CSS3 Transitions 你可能不知道的知识点

    如何临时让transition失效 我们给一个element设置了transition效果,但某些特殊情况,我们希望让transition临时失效.我们第一反应就是先移除transition设置,等其 ...

  5. UVa 10670 - Work Reduction

    题目大意:对n份文件进行处理使其减少到m份,有l个机构可供选择.每个机构提供两种方案:每减少一份收费a元,或者减少到文件数量的一半收费b元.根据各个机构收取费用进行排序. 很直接的题目,直接进行模拟就 ...

  6. 利用 Grunt (几乎)无痛地做前端开发 (一)之单元测试

    前言 如果你想开发一个js应用,甭管多简单,都要先创建整个宇宙 来看看我们的Javascript小宇宙: 确定如何根据需求.功能划分模块,如何将代码分成多个文件开发,合成一个发布 保证上一条的同时,使 ...

  7. mysql数据库锁定机制

    前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就 成为了各种数据库的核心技术之一.本章将对MySQL中两 ...

  8. Struts2框架学习(一)

    Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...

  9. js原生设计模式——9外观模式封装

    1.事件处理程序兼容性封装 <!DOCTYPE html><html lang="en"><head>    <meta charset= ...

  10. Eclipse 输入出错时自动查找类

    经常会只记得类的前半部分名称,这时可以双击这个没写完的类名,然后会弹出选择框: