原文链接http://www.cnblogs.com/zhouzhendong/p/8762639.html

题目传送门 - BZOJ3527

题意

  给出长度为$m$的序列$q_{1..m}$,让你输出长度为$m$的序列$E_{1..m}$。

  其中:

  $$E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^{m}\frac{q_j}{(i-j)^2}$$

题解

  我们设

  $$f_i=q_i,g_i=\frac 1{i^2}(g_0=0,且对于i>m,g_i=0),f_i^r=f_{m-i}$$

  于是:

  $$E_i=\sum_{j=0}^i f_jg_{i-j}-\sum_{j=i}^m f_jg_{j-i}$$

  这个式子的前一半是个裸的卷积,可以直接$FFT$。后一半要稍微变变。(有dalao说是两个裸的卷积!Orz)

  $$\sum_{j=i}^m f_{j}g_{j-i}\\=\sum_{j=i}^{m}f_{m-j}^rg_{i-j}\\=\sum_{j=0}^{m-i}f_{m-i-j}^rg_{j}$$

  令$i'=m-i$,则:

  $$\sum_{j=0}^{m-i}f_{m-i-j}^rg_{j}\\=\sum_{j=0}^{i'}f_{i'-j}^rg_{j}\\=\sum_{j=0}^{i'}f_{j}^rg_{i'-j}$$

  于是也是一个裸的卷积形式了。

  但是这题我做了很久。QAQ。

  一开始把$m$和$n$搞错,而且还很自信的认为是等价的。($n$见代码)

  然后发现$IDFT$之后忘记把数字除以$n$了。

  然后还是挂了。

  然后看(%)了看(%)网上AC的代码,发现我和他唯一的区别就是他把$i>m$的$g_i$都搞成$0$,而我没搞,但是我仍然很自信的认为是对的QAQ。

  最后把我的自信全部打翻,然后就突然A掉了QAQ。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1<<19;
int m,n,L,R[N];
double q[N],PI=acos(-1.0);
struct C{
double r,i;
C(){}
C(double a,double b){r=a,i=b;}
C operator + (C x){return C(r+x.r,i+x.i);}
C operator - (C x){return C(r-x.r,i-x.i);}
C operator * (C x){return C(r*x.r-i*x.i,i*x.r+r*x.i);}
}A[N],B[N],ans1[N],ans2[N],w[N];
void FFT(C a[]){
for (int i=0;i<n;i++)
if (i<R[i])
swap(a[i],a[R[i]]);
for (int d=1,t=n>>1;d<n;d<<=1,t>>=1)
for (int i=0;i<n;i+=(d<<1))
for (int j=0;j<d;j++){
C tmp=w[t*j]*a[i+j+d];
a[i+j+d]=a[i+j]-tmp;
a[i+j]=a[i+j]+tmp;
}
}
void FFT_times(C A[],C B[],C C[]){
FFT(A),FFT(B);
for (int i=0;i<n;i++)
w[i].i*=-1.0,C[i]=A[i]*B[i];
FFT(C);
for (int i=0;i<n;i++)
w[i].i*=-1.0,C[i].r/=n;
}
int main(){
scanf("%d",&m);
for (int i=1;i<=m;i++)
scanf("%lf",&q[i]);
for (n=1,L=0;n<m*2;n<<=1,L++);
for (int i=0;i<n;i++){
w[i]=C(cos(2*i*PI/n),sin(2*i*PI/n));
R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));
A[i]=C(q[i],0);
B[i]=C((i==0||i>m)?0:1.0/i/i,0);
}
FFT_times(A,B,ans1);
for (int i=0;i<n;i++){
A[i]=C(i<=m?q[m-i]:0,0);
B[i]=C((i==0||i>m)?0:1.0/i/i,0);
}
FFT_times(A,B,ans2);
for (int i=1;i<=m;i++)
printf("%.3lf\n",ans1[i].r-ans2[m-i].r);
return 0;
}

  

BZOJ3257 [Zjoi2014]力 多项式 FFT的更多相关文章

  1. 【BZOJ 3527】 3527: [Zjoi2014]力 (FFT)

    3527: [Zjoi2014]力 Time Limit: 30 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 2003  Solved: 11 ...

  2. [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)

    题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ...

  3. [ZJOI2014] 力 - 多项式乘法 FFT

    题意:给定 \({q_i}\),求 \[E_i = \sum_{i<j}{\frac{q_j}{(j-i)^2}} - \sum_{i>j}{\frac{q_j}{(j-i)^2}}\] ...

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

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

  5. BZOJ3527 [Zjoi2014]力 【fft】

    题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...

  6. 洛谷P3338 [ZJOI2014]力(FFT)

    传送门 题目要求$$E_i=\frac{F_i}{q_i}=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(j-i)^2}$ ...

  7. 【BZOJ3527】[ZJOI2014] 力(FFT)

    题目: BZOJ3527 分析: FFT应用第一题-- 首先很明显能把\(F_j\)约掉,变成: \[E_j=\sum _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

  8. [BZOJ3527][ZJOI2014]力:FFT

    分析 整理得下式: \[E_i=\sum_{j<i}{\frac{q_i}{(i-j)^2}}-\sum_{j>i}{\frac{q_i}{(i-j)^2}}\] 假设\(n=5\),考虑 ...

  9. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...

随机推荐

  1. 解决Docker安装MySQL不区分大小写问题

    Docker安装MySQL忽略大小写问题的问题连接MySQL: 查看当前mysql的大小写敏感配置 show global variables like '%lower_case%'; +------ ...

  2. 使用mysql将手机号、身份证号等字段进行脱敏

    -- 脱敏姓名 UPDATE wb_person_message SET `name`=(if(LENGTH(name)>6,CONCAT(LEFT(name,1), '**' ),CONCAT ...

  3. 打印并输出 log/日志到文件(C++)

    #include <stdarg.h> #define MAX_LEN 1024 bool debug_mode; // 使用方法同 printf void lprintf(const c ...

  4. 关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由

    注.可能因为系统和软件的缘故无法实现 背景 由于在听课过程过于自闭,于是想自己去网上搜点东西看下 于是 经过了一番乱搞 逐渐摸索出了现方法. 方案1: 大力出奇迹 由于电脑在刚刚进入的状态的时候有段时 ...

  5. CF618G(利用浮点数精度+矩乘优化DP)

    这题真的太神辣,%了一发题解,原来还能这么搞QWQ 设\(A_{i,j}\)表示不加任何限制时,第\(i\)个格子会出现权值为\(j\)的史莱姆的概率,则有: \[A_{i,j}=A_{i,j-1}* ...

  6. 位运算之——按位与(&)操作——(快速取模算法)

    学习redis 字典结构,hash找槽位 求槽位的索引值时,用到了 hash值 & sizemask操作, 其后的scan操作涉及扫描顺序逻辑,对同模的槽位 按一定规则扫描! 其中涉及位运算 ...

  7. Java之函数式接口

    函数式接口 概述:接口中只有一个抽象方法 下面介绍的可能很抽象,理解不了,至少在我看来单独的这几个借口是没有用的,跟最下面说的 Stream流一起用才会有效果 函数式接口,即适用于函数式编程场景的接口 ...

  8. 教你如何写出高效整洁的 css 代码——css优化(转载)

    css 写起来并不难,但在大型项目中,就变得难以管理,特别是不同的人在 css 书写风格上稍有不同,团队上就更加难以沟通,为此总结了一些如何实现高效整洁的 css 代码原则. css 优化的原则 1. ...

  9. 虚拟机网络配置和NFS

    Test Env: Ubuntu 16.04 VMware 克隆虚拟机 A 把一台虚拟机从一台服务器克隆到另一台服务器,拷贝.vmx(配置文件)和.vmdk文件,然后在新服务器的vmware直接打开. ...

  10. (二叉树 递归) leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...