首页 > 其他分享 >【题解】P3338 [ZJOI2014]力

【题解】P3338 [ZJOI2014]力

时间:2023-05-01 11:55:05浏览次数:39  
标签:frac limits int 题解 P3338 times ZJOI2014 cp sum

题目描述

给出 \(n\) 个数 \(q_1,q_2, \dots q_n\),定义

\[F_j~=~\sum_{i = 1}^{j - 1} \frac{q_i \times q_j}{(i - j)^2}~-~\sum_{i = j + 1}^{n} \frac{q_i \times q_j}{(i - j)^2} \]

\[E_i~=~\frac{F_i}{q_i} \]

对 \(1 \leq i \leq n\),求 \(E_i\) 的值。
\(1\leq n\leq 10^5\)

题解

对于乘积形式的式子计算,数据范围 \(10^5\),应该想到 \(FFT\) 加速。于是开始推式子。
首先\(E_i=\frac{F_j}{q_i}=\sum\limits_{i = 1}^{j - 1} \frac{q_i}{(i - j)^2}~-~\sum\limits_{i = j + 1}^{n} \frac{q_i}{(i - j)^2}\)。
令 \(f(i)=q_i\),\(g(i)=\frac{1}{i^2}\),于是原式为\(E_i=\sum\limits_{i=1}^{j-1}f(i)\times g(j-i)-\sum\limits_{i = j + 1}^{n}f(i)\times g(i-j)\)。
左边已经是一个卷积的形式了,来看看右边。
卷积形式是从零开始的,我们要尽量将式子化成卷积。
于是更改求和为:\(\sum\limits_{i=0}^{n-j}f(j+i)\times g(i)\)。
接下来是一个经典套路,可以将式子翻转使得\(f'(i)=f(n-i)\),得到\(\sum\limits_{i=0}^{n-j}f'((n-j)-i)\times g(i)\)
两者都是卷积形式,fft$加速一下即可。
小结:

  • fft加速乘法卷积
  • 乘号两边同加减的可以翻转式子
#include<bits/stdc++.h>
using namespace std;
inline int rd(){
	int f=1,j=0;
	char w=getchar();
	while(!isdigit(w)){
		if(w=='-')f=-1;
		w=getchar(); 
	}
	while(isdigit(w)){
		j=j*10+w-'0';
		w=getchar();
	}
	return f*j;
}
const int N=400010;
const double pai=acos(-1);
int n,rev[N];
struct cp{
	double x,y;
	cp (double xx=0,double yy=0){x=xx,y=yy;}
	cp operator +(cp a){return cp(x+a.x,y+a.y);}
	cp operator -(cp a){return cp(x-a.x,y-a.y);}
	cp operator *(cp a){return cp(x*a.x-y*a.y,x*a.y+y*a.x);}
}a[N],b[N],c[N];
void fft(cp *f,int n,int flg){
	for(int i=0;i<n;i++)if(i<rev[i])swap(f[i],f[rev[i]]);
	for(int p=2;p<=n;p<<=1){
		int len=p>>1;
		cp tg(cos(2*pai/p),flg*sin(2*pai/p));
		for(int k=0;k<n;k+=p){
			cp buf(1,0);
			for(int l=k;l<k+len;l++){
				cp tt=buf*f[len+l];
				f[len+l]=f[l]-tt;
				f[l]=f[l]+tt;
				buf=buf*tg;
			}
		}
	}
	if(flg==-1)for(int i=0;i<n;i++)f[i].x/=n;
	return ;
}
signed main(){
	n=rd();
	for(int i=1;i<=n;i++){
		scanf("%lf",&a[i].x),c[n-i].x=a[i].x;
		b[i].x=1.0/i/i;
	}
	int lim=1,L=0;
	while(lim<=(n<<1))lim<<=1,L++;
	for(int i=0;i<lim;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));
	fft(a,lim,1),fft(b,lim,1),fft(c,lim,1);
	for(int i=0;i<lim;i++)a[i]=a[i]*b[i],c[i]=c[i]*b[i];
	fft(a,lim,-1),fft(c,lim,-1);
	for(int i=1;i<=n;i++)printf("%.3lf\n",a[i].x-c[n-i].x);
	return 0;
}

标签:frac,limits,int,题解,P3338,times,ZJOI2014,cp,sum
From: https://www.cnblogs.com/flywatre/p/17366307.html

相关文章

  • [P5785 [SDOI2012]任务安排] 题解
    P5785[SDOI2012]任务安排题目描述分析很明显是一个dp我们不妨设\(dp[i]\)表示枚举到\(i\)的最小费用\(t[i]\)表示加工完第\(i\)个任务所用的总时间,也就是\(T[i]\)的前缀和由于每一批任务前都要一个时间为\(s\)的开机工作我们不妨把每一个这样的\(s\)秒提出来,则这\(s\)秒都......
  • CF1624G 题解
    前言题目传送门!更好的阅读体验?比较好玩的二进制题目。思路答案最小,也就是说较高位要尽可能小。所以很容易想到从最高位开始枚举。第\(i\)位为\(0\),等价于选出的所有边的第\(i\)位都为\(0\)。同时,由于我们是贪心,如果之前枚举过的第\(j\)位可以是\(0\),那么这两个条件......
  • 洛谷 P7579 「RdOI R2」称重(weigh) 题解
    题意:题目一道交互题。有n个球,里面有两个假球,假球比普通球的要轻,每次可以询问任意两组球的轻重关系,第一组轻为<,第二组轻为>,一样重量为=。思路:先考虑在一个区间内找1个假球。我们可以将区间尽量平均分为3份,先询问相等的两组球的轻重关系,分3种情况:第一组轻......
  • 【题解】CF44G Shooting Gallery
    题目大意给定\(n\)个三维空间的平面,由高度\(z\)、\(x\)的范围\([xl,xr]\)和\(y\)的范围\([yl,yr]\)来表示。有\(m\)次射击,每次射击点\((x,y)\),摧毁包含此点的\(z\)值最小的平面,输出此平面编号,若摧毁不了任何平面,输出\(0\)。题解点查平面不好做,于是可以转化为平面查点,先将平面按......
  • Codeforces Round 869 (Div.1 & Div.2) 题解
    2A.Politics因为编号为\(1\)的人一定不会离开,那么最后留下的人一定要和编号为\(1\)的人的所有参数都一致,所以计数即可。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>u......
  • CF51F Caterpillar题解
    题目传送门题意:定义毛毛虫为一种特殊的树,形如一条链上挂着若干个叶子。特殊地,在本题中的毛毛虫允许自环但不允许重边。给定一个无向图,每次操作可以合并两个点以及两个点的出边(两个点有相同出边则出现重边,两个点之间有边则出现自环)。求将其变为毛毛虫的最小操作次数。容易发现,......
  • Windows下安装Docker详细过程及问题解决
    官方手册供参考:https://docs.docker.com/desktop/windows/一:什么是Docker?Docker是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。Dock......
  • 义中常规赛430题解
    T1二分一个删除的数字个数然后考虑删除的数字肯定是从大到小来的,所以预处理一个降序的数组,这样能知道二分的数字个数所对应的数字。在原数组上跑最大子段和,如果碰到大于二分位置的数字就删了。最终成绩26分,因为对于二分的个数mid,原数组中a[mid]不止1个的话,无法判断哪些该删,哪......
  • Android Bitmap内存溢出问题解释
    Android平台在图片处理方面经常会出现OOM的问题,在去年开发的一个项目中,我也一直被这个问题所困扰,在这方面也搜集了许多的资料,今天仅仅针对Android平台的Bitmap说事儿,今后再对内存的问题做详细的探讨,android平台对图片解码这块确实设置的有内存上限,在解码Bitmap的时候android平台会......
  • abc252_d Distinct Trio 题解
    这是数学题耶!题意给定一个整数\(n\)和一个长度为\(n\)的整数序列\(a\),求满足以下要求的三元组个数:\(1\leqslanti<j<k\leqslantn\)。\(a_i\nea_j\),\(a_j\nea_k\),\(a_k\nea_i\)。思路先想正着做,好,不会。正着做不行就反着做,先算出所有情况,再去掉不合法。......