洛谷 P3338 [ZJOI2014]力
题意简述
读入\(n\)个数\(q_i\)
设\(F_j = \sum\limits_{i<j}\frac{q_i\times q_j}{(i-j)^2 }-\sum\limits_{i>j}\frac{q_i\times q_j}{(i-j)^2 }\)
令\(E_i=\frac{F_i}{q_i}\),求\(E_i\)
题解思路
先推式子
\(E_j=\frac{F_j}{q_j}=\sum\limits_{i<j}\frac{q_i}{(i-j)^2 }-\sum\limits_{i>j}\frac{q_i}{(i-j)^2 }\)
设\(T_i=i^{-2}\)
则\(E_j=\sum\limits_{i=1}^{j-1}q_iT_{j-i}-\sum\limits_{i=j+1}^{n}q_iT_{i-j}\)
再设\(p_i=q_{n-i+1}\)
则\(E_j=\sum\limits_{i=1}^{j-1}q_iT_{j-i}-\sum\limits_{i=1}^{j-1}p_iT_{j-i}\)
可以发现,这两项都是两个多项式卷积的结果,所以可以用FFT来做
注意:如果用三次变两次优化,会掉精
代码
#include <cmath>
#include <iostream>
#include <algorithm>
const int N=400005;
const double Pi=acos(-1.0);
int n,nn,m,lim=1,l=-1,r[N];
struct Com {
long double x,y;
Com(long double xx=0,long double yy=0) { x=xx; y=yy; }
}p[N],q[N],t[N];
Com operator +(const Com& x,const Com& y) { return Com(x.x+y.x,x.y+y.y); }
Com operator -(const Com& x,const Com& y) { return Com(x.x-y.x,x.y-y.y); }
Com operator *(const Com& x,const Com& y) { return Com(x.x*y.x-x.y*y.y,x.x*y.y+x.y*y.x); }
inline void FFT(Com *x,const int& lim,const int& type) {
for (register int i=0;i<lim;++i) if (i<r[i]) std::swap(x[i],x[r[i]]);
for (register int i=1;i<lim;i<<=1) {
Com UR(cos(Pi/i),sin(Pi/i)*type);
for (register int j=0,I=i<<1;j<lim;j+=I) {
Com w(1,0);
for (register int k=0;k<i;++k,w=w*UR) {
Com t1=x[j+k],t2=w*x[j+k+i];
x[j+k]=t1+t2; x[j+k+i]=t1-t2;
}
}
}
}
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0); std::cout.tie(0); std::cout<<std::fixed;
std::cin>>n;
for (register int i=1;i<=n;++i) std::cin>>p[i].x,t[i].x=1.0/i/i;
for (register int i=1;i<=n;++i) q[i].x=p[n-i+1].x;
for (nn=n<<1;lim<=nn;lim<<=1,++l);
for (register int i=0;i<lim;++i) r[i]=(r[i>>1]>>1)|((i&1)<<l);
FFT(p,lim,1); FFT(q,lim,1); FFT(t,lim,1);
for (register int i=0;i<lim;++i) p[i]=p[i]*t[i],q[i]=q[i]*t[i];
FFT(p,lim,-1); FFT(q,lim,-1);
for (register int i=1;i<=n;++i)
std::cout<<(p[i].x-q[n-i+1].x)/lim<<'\n';
}
洛谷 P3338 [ZJOI2014]力的更多相关文章
- [洛谷P3338] [ZJOI2014]力
洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ...
- 洛谷 P3338 [ZJOI2014]力 解题报告
P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...
- 洛谷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}$ ...
- [bzoj3527] [洛谷P3338] [Zjoi2014]力
Description 给出n个数qi,给出Fj的定义如下: \[ F_j=\sum\limits_{i<j} \frac{q_iq_j}{(i-j)^2} - \sum\limits_{i&g ...
- 洛咕 P3338 [ZJOI2014]力
好久没写过博客了.. 大力推式子就行了: \(E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}+\sum_{j>i}\frac{q_j}{(j-i)^2}\) 那么要转化 ...
- 【洛谷P3338】力
题目大意:求 \[ E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}} \] 题解:可以 ...
- [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)
题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ...
- P3338 [ZJOI2014]力(FFT)
题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...
- 【洛谷 P3338】 [ZJOI2014]力(FFT)
题目链接 \[\Huge{E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^{n}\frac{q_j}{(i-j)^2}}\] 设\(A[i]= ...
随机推荐
- Django rest framework(1)----认证
目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django ...
- Bzoj 2563: 阿狸和桃子的游戏 题解
2563: 阿狸和桃子的游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 970 Solved: 695[Submit][Status][Discu ...
- Pascal到c++,求大佬翻译!
请大佬翻译完毕后私信我谢谢! var a,b,c,d,f:array[1..1000]of longint; i,j,k,n,m,o:longint; procedure zx(p,q:longint ...
- C#5.0新增功能02 调用方信息
连载目录 [已更新最新开发文章,点击查看详细] 通过使用调用方信息特性,可获取有关方法的调用方的信息. 可以获取源代码的文件路径.源代码中的行号和调用方的成员名称. 此信息有助于跟踪.调试和创建 ...
- SQL Server 保存特殊字符时乱码
场景:协同完成的项目,数据库是同事创建,我们共同使用的表. 客户反应有一些字符查看的时候出现乱码.第一反应是否编码规则的问题.后来去数据库查发现数据库里就是乱码,百度了一下发现说特殊字符要保存在NVA ...
- ArcGIS API For JavaScript 开发(二)基础地图
有了开发环境,接下来的就是实践了,实践是检验真理的唯一标准! 多多练习,不要觉得自己能够想的出来就万事大吉了,还是得动手做才是最好的检验自己的能力. 基础地图,本节将通过arcgis api for ...
- Golang高效实践之interface、reflection、json实践
前言 反射是程序校验自己数据结构和类型的一种机制.文章尝试解释Golang的反射机制工作原理,每种编程语言的反射模型都是不同的,有很多语言甚至都不支持反射. Interface 在将反射之前需要先介绍 ...
- 如何阅读zstack源码
个人的gitbook将会持续更新 https://www.gitbook.com/book/jingtyu/how-to-learn-zstack-code
- [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL
参考: 1. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context https://arxiv.org/pdf ...
- java - 进程和线程的区别及联系
1. 进程 (1)进程主要有两个特征: a. 进程是一个实体,占有一定的地址空间.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region) ...