题目大意:给出n个数qi,定义 Fj为

      

令 Ei=Fi/qi,求Ei。

 
   其实这道题就是看到有FFT模板才觉得有必要学一下的...
   所以实际上就是已经知道题解了... = =。
   

所以问题就是求这两个多项式相乘的系数。

  这里咱卷积不太熟悉,所以咱们来证明一下这个结论显然还是不错的。
  首先咱们设 f(x)(k) 表示f(x)的 第k项的系数(就是 x^k-1 那一项)
  那么首先了解下卷积,如果f,g是一个序列(这指的是其系数构成的序列),那么卷积S也是一个序列
  咱们有:
     S(k)=∑f(x)(i)*g(x)(k-i)
  这个就是卷积,感觉会不会和FFT很熟悉额?
  其实多项式乘法的结果的第K项其实就是 乘上去的两个多项式的 系数的卷积S(k)。
  那么咱们就有卷积定理:
  A 卷 B = DFT^-1(DFT(A)*DFT(B)),其中DFT就是离散化傅里叶变换,DFT^-1即逆向的。
  然后咱们证明 Ej就是 f(x)和g(x)系数的卷积 S(j)
  即证明 ∑f(x)(i)*g(x)(j-i)=Ej=∑qi/(i-j)^2-∑qi/(i-j)^2
  左边弄开来:
  对于S(k),当i=k的时候,g的那一边为n,g(x)(n)=0,为0。
                      当i<k的时候,g的那一边为大于n的,则咱们设的g(x)(n+k-i)>0,而这里的i是<k的qi会算进来。
                      当i>k的时候,g的那一边为小于n的,而咱们设的g(x)(n+k-i)<0,而这里的i是>k的qi会算进来。
                      这些都是符合的。然后咱们还得证明越界的话会发生什么,假设i>n了,它是0,然后i<0,它也是0,所以越界只会使那个变成0,所以这个是正确的,然后实际上咱们只需要 n+1~2n的卷积即可。
                      然后还有系数,g(n+k-i)的系数是 1/(n+k-i-n)^2,突然发现竟然就是 1/(k-i)^2【这里的正确性咱还是有的迷糊...待修改】
 
 然后弄清楚之后就可以直接上模板了。
 这题的卷积还值得再品味一下。
================================
PS:这题有更直观的解法:

设A[i]=q[i],B[i]=1/(i^2)。

设C[i]=sigma(A[j]*B[i-j]),D[i]=sigma(A[n-j-1]*B[i-j])。

那么所求的E[i]=C[i]-D[i]。

不难发现C[i]已经是标准的卷积形式了,用FFT即可。

对于D[i],令A'[i]=A[n-i-1],那么D[i]=sigma(A[j]*B[i-j]),于是也用FFT即可。

program bzoj3527;
type cp=record x,y:double;end;
     arr=array[0..1 shl 18]of cp;
 
var a,b,tt,w:arr;
    wt:cp;
    m,n:longint;
 
operator *(var a,b:cp)c:cp;
begin c.x:=a.x*b.x-a.y*b.y;c.y:=a.x*b.y+a.y*b.x;end;
operator +(var a,b:cp)c:cp;
begin c.x:=a.x+b.x;c.y:=a.y+b.y;end;
operator -(var a,b:cp)c:cp;
begin c.x:=a.x-b.x;c.y:=a.y-b.y;end;
 
procedure dft(var a:arr;s,t:longint);
var i,p:longint;
begin
  if n shr t=1 then exit;
  dft(a,s,t+1);
  dft(a,s+(1 shl t),t+1);
  for i:=0 to n shr (t+1)-1 do
   begin
     p:=i shl (t+1)+s;
     wt:=w[i shl t]*a[p+1 shl t];
     tt[i]:=a[p]+wt;
     tt[i+n shr (t+1)]:=a[p]-wt;
   end;
  for i:=0 to n shr t-1 do a[i shl t+s]:=tt[i];
end;
 
procedure init;
var i:longint;
    ans:double;
begin
  read(n);
  for i:=0 to n-1 do read(a[i].x);
  for i:=0 to n-1 do b[i].x:=(-1.0/(n-i))/(n-i);
  b[n].x:=0;
  for i:=1 to n do b[n+i].x:=(1.0/i)/i;
  m:=1;
  while m<(n shl 1+1) do m:=m shl 1;
  i:=n;n:=m;m:=i;
  for i:=0 to n-1 do w[i].x:=cos(pi*2*i/n);
  for i:=0 to n-1 do w[i].y:=sin(pi*2*i/n);
  dft(a,0,0);dft(b,0,0);
  for i:=0 to n-1 do a[i]:=a[i]*b[i];
  for i:=0 to n-1 do w[i].y:=-w[i].y;
  dft(a,0,0);
  for i:=m to m shl 1-1 do
   begin
     ans:=a[i].x/n;
     writeln(ans:0:3);
   end;
end;
 
begin
  init;
end.
……
但凡a[i]=sigma{b[j]*c[i-j]}的递推都能用FFT搞
但凡a[i]=sigma{a[j]*b[i-j}的递推都能用分治+FFT算贡献搞
所以这题没什么好说的,牢记形式就行了

转自 z55250825 的几篇关于FFT的博文(三)的更多相关文章

  1. 转自 z55250825 的几篇关于FFT的博文(二)

    题目大意:高精度乘法.     fft的实现貌似有很多种,咱先写的是一种递归的fft,应该算是比较快的了吧.参考了 Evil君 的代码,那个运算符重载看的咱P党泪流满面. (没想到P竟然有运算符重载咩 ...

  2. 转自 z55250825 的几篇关于FFT的博文(一)

        关于FFT,咱们都会迫不及待地 @  .....(大雾)(貌似被玩坏了...)    .....0.0学习FFT前先orz FFT君.         首先先是更详细的链接(手写版题解点赞0v ...

  3. 2016年1月25日 《1024伐木累》-小白篇之开发网站,三天!(中篇-2奇怪的IE)-总章节十一

    往期回顾:  老王的“先见之明”,解决了困扰耗仔三人的大难题.顺利安装完开发工具,大家投入紧张的工作.航空部领导的突然闯入,IE不兼容,页面错乱,摆在三人面前的形势依然严峻.第一次见这阵仗的耗仔,又会 ...

  4. iOS开发UI篇—Quartz2D简单使用(三)

    iOS开发UI篇—Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界 ...

  5. 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)

    Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...

  6. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  7. SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)

    前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL ...

  8. 转一篇老外写的博文:Android automated testing (Robotium)

    Robotium的中文资料甚少,只得求助于老外,发现了一篇不错的文章:https://blog.codecentric.de/en/2011/03/android-automated-testing- ...

  9. Linux服务器架设篇,DNS服务器(三),正反解区域的配置

    一.大体架构 DNS服务器其实只有一个"真正"的配置文件,即 /etc/named.conf .其他的配置文件都是依据此配置展开的.每个域都需要两个配置文件,即正解文件和反解文件. ...

随机推荐

  1. MyBatis拦截器:给参数对象属性赋值

    该拦截器的作用:在进行增加.修改等操作时,给数据模型的一些通用操作属性(如:创建人.创建时间.修改人.修改时间等)自动赋值. 该实现是在DAO层拦截,即存入DB前最后一层.后经分析,不是很合理,改为在 ...

  2. Arithmetic Expression

    时间限制:2000ms 单点时限:200ms 内存限制:256MB 描述 Given N arithmetic expressions, can you tell whose result is cl ...

  3. Poj 1006 / OpenJudge 2977 1006 Biorhythms/生理周期

    1.链接地址: http://poj.org/problem?id=1006 http://bailian.openjudge.cn/practice/2977 2.题目: Biorhythms Ti ...

  4. highcharts图表

    最近项目中用到highcharts雷达图,如下 其实echarts就不错,echarts用canvas,highcharts用svg,各有特点 代码如下: index.html <!doctyp ...

  5. Android Studio第一次提交git使用

    安装: Git客户端网址:http://git-scm.com/download/ 根据自己的使用平台下载对应的客户端.这里以Mac系统为例,当客户端软件安装配置完毕后,打开AS的配置面板,找到Git ...

  6. C# IO操作磁盘上的txt

    using System.IO; //写入并导出到磁盘 StreamWriter sw = new StreamWriter(@"H:\text.txt"); sw.WriteLi ...

  7. 存储过程/游标/mysql 函数

    存储过程和函数(存储在 mysql数据库中的 proc表,所以检查有没有这个表)存储过程是一种存储程序(如正规语言里的子程序一样),mysql支持有两种:存储过程,在其他SQL语句中可以返回值的函数( ...

  8. js中的callback(阻塞同步或异步时使用)

    1.回调就是一个函数的调用过程,函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b, 那么这个过程就叫回调 eg. function a(callback){ alert('paren ...

  9. Android 之 悬浮窗

    昨天研究Android的悬浮窗,遇到一个问题,研究了一天,总算找到结症了,原因非常坑人..... 问题是这样的,我想要将悬浮窗展现在桌面或其他应用之上,我的开发机子用的是MIUI,结果发现在机子上无论 ...

  10. oracle日期格式数据修改

    select * from INVOICE_NEW where ref_no='32308' update INVOICE_NEW set check_d=to_date('2015/11/16', ...