博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ZJOI2014]力
阅读量:7284 次
发布时间:2019-06-30

本文共 1154 字,大约阅读时间需要 3 分钟。

[ZJOI2014]力

题目大意:

给定\(q_{1\sim n}(n\le10^5)\),求\(g_i=\sum_{j<i}\frac{q_j}{(i-j)^2}+\sum_{i>j}\frac{q_j}{(i-j)^2}\)

思路:

\(f_i=\frac1{i^2}\),则

\[ g_i=\sum_{j=0}^{i-1}q_if_{i-j}-\sum_{j=i+1}^nq_jf_{j-i} \]
\(p\)\(q\)的翻转,\(a_i\)表示前半个和式,\(b_i\)表示后半个和式翻转,则
\[ a_i=\sum_{j=0}^{i-1}q_if_{i-j} \]
\[ b_i=\sum_{j=0}^{i-1}p_if_{i-j} \]
用FFT即可求出。
时间复杂度\(\mathcal O(n\log n)\)

源代码:

#include
#include
#include
#include
#include
inline int getint() { register char ch; while(!isdigit(ch=getchar())); register int x=ch^'0'; while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); return x;}inline double getdouble() { double x; scanf("%lf",&x); return x;}const int N=262144;const double pi=M_PI;typedef std::complex
comp;int lim;double ans[N];comp q[N],ru[N],iru[N],p[N],f[N],a[N],b[N];inline void init_ru(const int &n) { for(register int i=0;i
j) std::swap(f[i],f[j]); for(register int l=n>>1;(j^=l)
>=1); } for(register int i=2;i<=n;i<<=1) { const int m=i>>1; for(register int j=0;j

转载于:https://www.cnblogs.com/skylee03/p/9325614.html

你可能感兴趣的文章
HDU1319 POJ1595 UVA406 UVALive5490 ZOJ1312 Prime Cuts【素数筛选+打表】
查看>>
事务的特性及事务的隔离级别(转)
查看>>
转:如何正确彻底删除webpack 全局或是局部?
查看>>
【Python】Symbol Review
查看>>
电脑 F键(功能键)的具体作用
查看>>
004-软件质量保证&QC/QA
查看>>
选择排序的实现以及性能测试
查看>>
基于snowfall的玫瑰花瓣飘落效果
查看>>
linux之cut用法
查看>>
结交比自己优秀的人
查看>>
Home键和back键下 Activity的生命周期变化
查看>>
用MotoMidMan给L7批量安装java程序
查看>>
C语言中main函数之前可以进行赋值作吗?
查看>>
WKWebView Cookie注入
查看>>
组合数据类型,英文词频统计
查看>>
【3】火狐中: radio被点击以后,重刷页面,不会选择默认的radio
查看>>
读书笔记:《HTML5开发手册》-- 现存元素的变化
查看>>
mongodb php
查看>>
C#限速下载网络文件
查看>>
在operator=中处理”自我赋值“
查看>>