2019.02.28 bzoj3527: [Zjoi2014]力(fft)
传送门
fftfftfft菜题。
题意简述:给一个数列aia_iai,对于i=1→ni=1\rightarrow ni=1→n求出ansi=∑i<jai(i−j)2−∑i>jai(i−j)2ans_i=\sum_{i<j}\frac{a_i}{(i-j)^2}-\sum_{i>j}\frac{a_i}{(i-j)^2}ansi=∑i<j(i−j)2ai−∑i>j(i−j)2ai
思路:
考虑分开求减号前后的两组和。
前面的直接是一个卷积的形式,后面的可以把aaa数组翻转一下也是一个卷积的形式,然后上fftfftfft求即可。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const double pi=acos(-1.0);
const int N=1e5+5;
struct cp{
double x,y;
cp(double _x=0,double _y=0):x(_x),y(_y){}
friend inline cp operator+(const cp&a,const cp&b){return cp(a.x+b.x,a.y+b.y);}
friend inline cp operator-(const cp&a,const cp&b){return cp(a.x-b.x,a.y-b.y);}
friend inline cp operator*(const cp&a,const cp&b){return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
friend inline cp operator/(const cp&a,const double&b){return cp(a.x/b,a.y/b);}
}a[N];
vector<int>pos;
vector<cp>A,B;
int lim,tim,n;
inline void init(const int&up){
lim=1,tim=0;
while(lim<=up)lim<<=1,++tim;
pos.resize(lim),A.resize(lim),B.resize(lim),pos[0]=0;
for(ri i=0;i<lim;++i)pos[i]=(pos[i>>1]>>1)|((i&1)<<(tim-1));
}
inline void fft(vector<cp>&a,const int&type){
for(ri i=0;i<lim;++i)if(i<pos[i])swap(a[i],a[pos[i]]);
cp wn,w,a0,a1;
for(ri mid=1;mid<lim;mid<<=1){
wn=cp(cos(pi/mid),sin(pi/mid)*type);
for(ri j=0,len=mid<<1;j<lim;j+=len){
w=cp(1,0);
for(ri k=0;k<mid;++k,w=w*wn)a0=a[j+k],a1=w*a[j+k+mid],a[j+k]=a0+a1,a[j+k+mid]=a0-a1;
}
}
if(type==-1)for(ri i=0;i<lim;++i)a[i]=a[i]/lim;
}
struct poly{
vector<cp>a;
poly(int k=0,cp x=cp(0,0)){a.resize(k+1),a[k]=x;}
inline cp&operator[](const int&k){return a[k];}
inline const cp&operator[](const int&k)const{return a[k];}
inline int deg()const{return a.size()-1;}
inline poly extend(const int&k){poly ret=*this;return ret.a.resize(k+1),ret;}
friend inline poly operator*(const poly&a,const poly&b){
int n=a.deg(),m=b.deg();
init(n+m);
for(ri i=0;i<=n;++i)A[i]=a[i];
for(ri i=0;i<=m;++i)B[i]=b[i];
for(ri i=n+1;i<lim;++i)A[i]=cp(0,0);
for(ri i=m+1;i<lim;++i)B[i]=cp(0,0);
fft(A,1),fft(B,1);
for(ri i=0;i<lim;++i)A[i]=A[i]*B[i];
poly ret;
return fft(A,-1),ret.a=A,ret;
}
}X,Y;
double ans[2][N];
inline void solve(int type){
poly X(n),Y(n);
X[0]=Y[0]=cp(0,0);
for(ri i=1;i<=n;++i)X[i]=a[i],Y[i]=cp(1.0/(double)i/(double)i,0);
X=(X*Y).extend(n);
for(ri i=1;i<=n;++i)ans[type][i]=X[i].x;
}
int main(){
scanf("%d",&n);
for(ri i=1;i<=n;++i)scanf("%lf",&a[i].x);
solve(1),reverse(a+1,a+n+1),solve(0),reverse(ans[0]+1,ans[0]+n+1);
for(ri i=1;i<=n;++i)printf("%.3lf\n",ans[1][i]-ans[0][i]);
return 0;
}
2019.02.28 bzoj3527: [Zjoi2014]力(fft)的更多相关文章
- bzoj3527: [Zjoi2014]力 fft
bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...
- [BZOJ3527][ZJOI2014]力 FFT+数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们 ...
- BZOJ3527[Zjoi2014]力——FFT
题目描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi<100000 ...
- 梦想MxWeb3D协同设计平台 2019.02.28更新
梦想MxWeb3D协同设计平台 2019.02.28更新 SDK开发包下载地址: http://www.mxdraw.com/ndetail_10130.html 在线演示网址: http://www ...
- [bzoj3527][Zjoi2014]力_FFT
力 bzoj-3527 Zjoi-2014 题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\lim ...
- 【BZOJ-3527】力 FFT
3527: [Zjoi2014]力 Time Limit: 30 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 1544 Solved: 89 ...
- 【BZOJ】3527: [Zjoi2014]力 FFT
[参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...
- P3338 [ZJOI2014]力(FFT)
题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...
- 【bzoj3527】[Zjoi2014]力 FFT
2016-06-01 21:36:44 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 我就是一个大傻叉 微笑脸 #include&l ...
随机推荐
- 一切为了解决隐私问题,绿洲实验室Ekiden协议介绍
绿洲实验室官网截图 下一代区块链平台的竞争已经悄然展开,每个月我们都能看到新成立的创业公司宣称,他们要采用区块链解决所有问题.大约80-90%的区块链项目,运行在像Ethereum这样的平台上. 创建 ...
- 20165312 2017-2018-2 《JAVA程序设计》第5周学习总结
20165312 2017-2018-2 <JAVA程序设计>第5周学习总结 一.本周学习内容总结 总的来说,本周学习较吃力,在理解第十章的代码时速度较慢. 内部类 内部类是定义在一个类中 ...
- SQL查数据库有哪些触发器,存储过程...
select name from sysobjects where xtype='TR' --所有触发器select name from sysobjects where xtype='P' --所有 ...
- sync;sync;sync;reboot
Sync命令 在用reboot命令启动unix系统后,系统提示出错信息,部分应用程序不能正常工作.经仔细检查系统文件,并和初始的正确备份进行比较,发现某些文件确实被破坏了,翻来覆去找不到文件遭破坏的原 ...
- kubernetes学习笔记之十二:资源指标API及自定义指标API
第一章.前言 以前是用heapster来收集资源指标才能看,现在heapster要废弃了从1.8以后引入了资源api指标监视 资源指标:metrics-server(核心指标) 自定义指标:prome ...
- Action Form的过程
1.读取配置(初始化ModuleConfig对象) Struts框架总控制器(ActionServlet)是一个Servlet, 在web.xml中配置成自动启动的Servlet. 读取配置文件(st ...
- Python模拟登陆TAPD
因为在wiki中未找到需要的数据,查询也很迷,打算用python登录tapd抓取所需项目下的wiki数据,方便查找. 2018-9-30 19:12:44 几步走 模拟登录tapd 抓取wiki页左侧 ...
- 李清华201772020113《面向对象程序设计(Java)》第六周学习总结
第一部分 理论知识 1.继承 用已有类来构建新类的一种机制.新类可以继承父类的方法和域,同时可以在新类中添加新的方法和域. 已有类称为:超类.基类或父类.新类称作:子类.派生类或孩子类. 子类的构造器 ...
- leetcode206
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...
- python 爬虫启航
1. 使用excel(简单使用) 数据- 自网站-导入 2.you-get python爬虫入门 1.环境配置 python,request,lxml 2.原理 爬虫的框架如下: 1.挑选种子URL: ...