第一次背出FFT模板,在此mark一道裸题。

Description

  给出n个数qi,给出Fj的定义如下:

  

  令Ei=Fi/qi,求Ei。

Input

  第一行一个整数n。
  接下来n行每行输入一个数,第i行表示qi。

Output

  n行,第i行输出Ei。与标准答案误差不超过1e-2即可。

Sample Input

  5
  4006373.885184
  15375036.435759
  1717456.469144
  8514941.004912
  1410681.345880

Sample Output

  -16838672.693
  3439.793
  7509018.566
  4595686.886
  10903040.872

HINT

  n ≤ 100000,0 < qi < 1000000000。

Solution

  看到题目中 下标为j的项等于下标为i的项与下标为j±i的项的乘积之和,你应该会有所感觉吧。

  设,那么 

  显然两边都是卷积的式子,所以两边分别做一次FFT就可以了。

  然而我们再思考一下,发现两边的式子是可以合并的:

  设,那么 就完全成立了。只要做一次FFT就够了。

  时间复杂度O(nlogn)。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define pi acos(-1)
#define MN 263005
using namespace std;
struct cp
{
double v,i;
friend cp operator+(const cp& a,const cp& b) {return (cp){a.v+b.v,a.i+b.i};}
friend cp operator-(const cp& a,const cp& b) {return (cp){a.v-b.v,a.i-b.i};}
friend cp operator*(const cp& a,const cp& b) {return (cp){a.v*b.v-a.i*b.i,a.v*b.i+a.i*b.v};}
}w[][MN],A[MN],B[MN],C[MN];
double a[MN];
int r[MN];
int N,n; void init(int n)
{
register int i,j,k;
for (N=;N<=n;N<<=); cp g=(cp){cos(pi*/N),sin(pi*/N)};
for (i=j=;i<N;r[++i]=j)
for (k=N>>;(j^=k)<k;k>>=);
w[][]=w[][]=(cp){,};
for (i=;i<N;++i) w[][i]=w[][i-]*g;
for (i=;i<N;++i) w[][i]=w[][N-i];
} void FFT(cp* a,bool g)
{
register int i,j,k;
for (i=;i<N;++i) if (r[i]<i) swap(a[i],a[r[i]]);
for (i=;i<N;i<<=)
for (j=;j<N;j+=(i<<))
for (k=;k<i;++k)
{
cp x=a[i+j+k]*w[g][N/(i<<)*k];
a[i+j+k]=a[j+k]-x;
a[j+k]=a[j+k]+x;
}
if (g) for (i=;i<N;++i) a[i].v/=N,a[i].i/=N;
} int main()
{
register int i;
scanf("%d",&n);
for (i=;i<=n;++i) scanf("%lf",&a[i]),A[i].v=a[i];
for (i=;i<n;++i)
B[n+i].v=(double)/i/i,B[n-i].v=(double)-/i/i;
init(n<<);
FFT(A,); FFT(B,);
for (i=;i<N;++i) C[i]=A[i]*B[i];
FFT(C,);
for (i=;i<=n;++i) printf("%.7lf\n",C[n+i].v);
}

Last Word

  推荐miskcoo的关于学习FFT的blog:从多项式乘法到快速傅里叶变换

[BZOJ]3527 力(ZJOI2014)的更多相关文章

  1. BZOJ 3527 力 | FFT

    BZOJ 3527 力 | 分治 题意 给出数组q,$E_i = \sum_{i < j} \frac{q_i}{(i - j) ^ 2} - \sum_{i > j} \frac{q_i ...

  2. BZOJ 3527 【ZJOI2014】 力

    题目链接:力 听说这道题是\(FFT\)板子题,于是我就来写了…… 首先可以发现这个式子:\[E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}-\sum_{j>i}\fr ...

  3. BZOJ 3527 力

    fft推下公式.注意两点: (1)数组从0开始以避免出错. (2)i*i爆long long #include<iostream> #include<cstdio> #incl ...

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

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

  5. 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} ...

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

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

  7. ●BZOJ 3527 [Zjoi2014]力

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

  8. bzoj 3527 [Zjoi2014]力——FFT

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

  9. bzoj 3527 [Zjoi2014] 力 —— FFT

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

随机推荐

  1. 201621123031 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 答 ...

  2. Cypher语法

    cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看 ...

  3. 第四十四条:为所有导出的API元素编写文档注释

    简而言之,要为API编写文档,文档注释是最好,最有效的途径.对于所有可导出的API元素来说,使用文档注释应该被看作是强制性的.要 采用一致的风格来遵循标准的约定.记住,在文档注释内部出现任何的HTML ...

  4. bzoj千题计划165:bzoj5127: 数据校验

    http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf 区间的任意一个子区间都满足值域连续 等价于 区间任意一个长为2的子区间都满足值域连续 ...

  5. JAVA_SE基础——2.环境变量的配置&测试JDK

    哈喽,利用晚上的空余时间再写篇心的~~~  谢谢大家 前一篇文章 JAVA_SE基础--JDK&JRE下载及安装http://blog.csdn.net/thescript_j/article ...

  6. java 实现多文件打包下载

    jsp页面js代码: function downloadAttached(){ var id = []; id.push(infoid); var options = {}; options.acti ...

  7. emqtt 试用(一)安装和测试

    一.安装 http://emqtt.io/docs/v2/getstarted.html http://emqtt.io/docs/v2/advanced.html http://emqtt.io/d ...

  8. 新概念英语(1-9)How is Ema?

    A:Hello Helen. B:Hi Steven. A:How are you today? B:I'm very well, thank you. And you? A:I'm fine tha ...

  9. python 网络爬虫与信息提取 学习笔记day4

    正则表达式简介: 简洁表示一组字符串的特征或者模式,在文本处理中十分常用,主要应用于字符串匹配中 1.  通用的字符串表达框架 2.  简洁表达一组字符串的表达式 3.  针对字符串表达简洁和特征思想 ...

  10. JS中全等和相等操作符的区别和比较规则

    一.两者的区别 相等:先强制转换变量类型,再比较 全等:不转换类型,一旦类型不同,就是不全等. 二.相等和不相等的比较规则 1.操作符中有布尔值时: 比较前先将之转换为数值 false => 0 ...