╰( ̄▽ ̄)╭



对于100%的数据,n≤100000;0<qi<1,000,000,000。

(⊙ ▽ ⊙)

令ri=1i2,

设Fj=∑j−1i=0qi∗rj−1−i,Gj=∑j−1i=0qn−1−i∗rj−i−1。

显然Ei=Fi−Gn−i−1。

像F,G的这样的式子,我称它为卷积式

当满足

f[j]=∑i=0j−1a[i]∗b[j−1−i]

这样的形式时,可以利用快速傅里叶变换

设多项式A的系数分别为a[0],a[1],a[2],...,a[j−1],

多项式B的系数分别为b[0],b[1],b[2],...,b[j−1]。

则多项式C(其中C=A∗B)的系数就分别为f[0],f[1],f[2],...,f[j−1]。

( ̄~ ̄)

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define ll long long
using namespace std;
const char* fin="ex3617.in";
const char* fout="ex3617.out";
const int inf=0x7fffffff;
const int maxn=500007;
const double pi=acos(-1);
struct Z{
double x,y;
Z(double _x=0,double _y=0){x=_x;y=_y;}
Z operator +(const Z &a){return Z(x+a.x,y+a.y);}
Z operator -(const Z &a){return Z(x-a.x,y-a.y);}
Z operator *(const Z &a){return Z(x*a.x-y*a.y,x*a.y+y*a.x);}
}a[maxn],b[maxn],c[maxn],d[maxn];
int n,m,i,j,k,r[maxn];
void fft(Z *a,int sig){
int i,j,k;
for (i=0;i<n;i++) if (r[i]<i) swap(a[r[i]],a[i]);
for (i=2;i<=n;i<<=1){
int ha=i/2;
for (j=0;j<ha;j++){
Z w(cos(j*pi*sig/ha),sin(j*pi*sig/ha));
for (k=j;k<n;k+=i){
Z u=a[k],v=w*a[k+ha];
a[k]=u+v;
a[k+ha]=u-v;
}
}
}
}
int main(){
scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%lf",&a[i].x);
c[n-1-i].x=a[i].x;
}
for (i=1;i<n;i++) b[i]=1.0/i/i;
m=n;
k=0;
for (n=1;n<m<<1;n<<=1) k++;
for (i=0;i<n;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(k-1)); fft(a,1);
fft(c,1);
fft(b,1);
for (i=0;i<n;i++) a[i]=a[i]*b[i];
for (i=0;i<n;i++) c[i]=c[i]*b[i];
fft(a,-1);
fft(c,-1); for (i=0;i<m;i++) printf("%lf\n",a[i].x/n-c[m-i-1].x/n);
return 0;
}

(⊙v⊙)

1.

for (i=0;i<n;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(k-1));

这是一行很强的代码,可以用于求出:二进制数i在k位意义上的倒转r[i]

具体地,

采用递推的形式,r[i]可由r[i shr 1]推得。

实质是i和i shr 1在二进制中十分相似,区别只在于i多了一位数。

2.WARNING

最后的结果一定要/n!

【JZOJ3617】【ZJOI2014】力的更多相关文章

  1. [ZJOI3527][Zjoi2014]力

    [ZJOI3527][Zjoi2014]力 试题描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi.试求Ei. 输入 包含一个整数n,接下来n行每行输入一个数,第i行表示qi. 输出 有n ...

  2. bzoj3527: [Zjoi2014]力 fft

    bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

  3. 洛谷 P3338 [ZJOI2014]力 解题报告

    P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...

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

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

  5. [洛谷P3338] [ZJOI2014]力

    洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ...

  6. P3338 [ZJOI2014]力(FFT)

    题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...

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

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

  8. 笔记-[ZJOI2014]力

    [ZJOI2014]力 \[\begin{split} E_j=&\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{ ...

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

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

  10. [bzoj3527][Zjoi2014]力_FFT

    力 bzoj-3527 Zjoi-2014 题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\lim ...

随机推荐

  1. adb的安装及配置

    1.下载adb的安装包进行下载 2.将安装报进行解压 3.配置环境变量,将adb的根目录添加到path环境变量中 4.在终端命令行中输入adb  servion命令,检查是否安装成功,如显示版本号则安 ...

  2. 前端面试题(js部分)

    一.==和===的区别 1.==   用于比较.判断两者相等,比较时可自动换数据类型 2.===  用于(严格)比较.判断两者(严格)相等,不会进行自动转换,要求进行比较的操作数必须类型一致,不一致时 ...

  3. elasticsearch 中文API 更新(五)

    更新API 你能够创建一个UpdateRequest,然后将其发送给client. UpdateRequest updateRequest = new UpdateRequest(); updateR ...

  4. Bash 常用快捷方式

    从历史中执行命令 ctrl +r 搜索历史命令记录 !$ 重复上一个命令参数 文本编辑的快捷方式 c    分别更改这些配对标点符号中的文本内容 di   分别删除这些配对标点符号中的文本内容 do ...

  5. springcloud之配置中心用法

    一.配置文件服务器server端 1.构建server端所需jar <dependencies> <dependency> <groupId>org.springf ...

  6. 转:Linux--进程间通信(信号量,共享内存)

    源地址:http://www.cnblogs.com/forstudy/archive/2012/03/26/2413724.html Linux--进程间通信(信号量,共享内存)(转)   一. 信 ...

  7. 【JZOJ5179】【NOI2017模拟6.29】哈哈

    题意 给定一个长度为n的序列,你可以进行若干次操作: 选择一个区间,删掉,并获得Val[Len]的得分,Len为这个区间的长度: 其中这个区间满足: 1.相邻两个数差的绝对值为1 2.每个数都大于相邻 ...

  8. java 中Vector的使用详解

    Vector 可实现自动增长的对象数组. java.util.vector提供了向量类(vector)以实现类似动态数组的功能.在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提 ...

  9. Leetcode147. Insertion Sort List对链表进行插入排序

    对链表进行插入排序. 从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插入排序算法: 插入排序是 ...

  10. vue 图片上传功能

    这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下:   <ul class="clearfix">   ...