Description###

给出n个数qi,给出Fj的定义如下:

\[F_j=\sum\limits_{i<j} \frac{q_iq_j}{(i-j)^2} - \sum\limits_{i>j} \frac{q_iq_j}{(i-1)^2}
\]

令Ei=Fi/qi,求Ei.

Input###

第一行一个整数n。

接下来n行每行输入一个数,第i行表示qi。

n≤100000,0<qi<1000000000

Output###

n行,第i行输出Ei。与标准答案误差不超过1e-2即可。

Sample Input###

5

4006373.885184

15375036.435759

1717456.469144

8514941.004912

1410681.345880

Sample Output###

-16838672.693

3439.793

7509018.566

4595686.886

10903040.872


想法##

对FFT及卷积等还不是很熟,所以这道题还是参考的题解。

首先,原式化简得:

\[E_j=\sum\limits_{i<j} \frac{q_i}{(i-1)^2} - \sum\limits_{i>j} \frac{q_i}{(i-j)^2}
\]

设 \(g_i= \frac{1}{i^2}\) ,则

\[E_j=\sum\limits_{i<j} q_ig_{j-i} - \sum\limits_{i>j} q_i g_{j-i}
\]

我们发现前面的求和式子就是一个卷积形式,可用fft

而后面的求和式子,若将下标i反过来,就也是一个标准的卷积形式,可用fft

之后就出来啦。


代码##

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath> using namespace std; const int N = 300005;
const double pi = 3.1415926535897932384626433832795; struct c{
double r,i;
c() { r=i=0.0; }
c(double x,double y) { r=x; i=y; }
c operator + (const c &b) { return c(r+b.r,i+b.i); }
c operator += (const c &b) { return *this=*this+b; }
c operator - (const c &b) { return c(r-b.r,i-b.i); }
c operator -= (const c &b) { return *this=*this-b; }
c operator * (const c &b) { return c(r*b.r-i*b.i,r*b.i+b.r*i); }
c operator *= (const c &b) { return *this=*this*b; }
}a1[N],a2[N],b[N],x[N]; int l;
int r[N];
void fft(c A[],int ty){
for(int i=0;i<l;i++) x[r[i]]=A[i];
for(int i=0;i<l;i++) A[i]=x[i];
for(int i=2;i<=l;i<<=1){ /**/
c wn(cos(pi*2/i),ty*sin(pi*2/i));
for(int j=0;j<l;j+=i){
c w(1,0);
for(int k=j;k<j+i/2;k++){
c t=w*A[k+i/2];
A[k+i/2]=A[k]-t;
A[k]+=t;
w*=wn;
}
}
}
}
int n; int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%lf",&a1[i].r);
a2[n-i-1].r=a1[i].r;
}
for(int i=1;i<n;i++) b[i].r=1.0/((double)i*i); l=1;
while(l<n*2) l<<=1;
for(int i=0;i<l;i++) r[i]=(r[i>>1]>>1)|((i&1)*(l>>1)); fft(a1,1); fft(a2,1); fft(b,1);
for(int i=0;i<l;i++) {
a1[i]*=b[i];
a2[i]*=b[i];
}
fft(a1,-1); fft(a2,-1); for(int i=0;i<n;i++)
printf("%.3lf\n",a1[i].r/l-a2[n-i-1].r/l); return 0;
}

[bzoj3527] [洛谷P3338] [Zjoi2014]力的更多相关文章

  1. [洛谷P3338] [ZJOI2014]力

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

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

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

  3. 洛谷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}$ ...

  4. 洛谷 P3338 [ZJOI2014]力

    题意简述 读入\(n\)个数\(q_i\) 设\(F_j = \sum\limits_{i<j}\frac{q_i\times q_j}{(i-j)^2 }-\sum\limits_{i> ...

  5. 洛咕 P3338 [ZJOI2014]力

    好久没写过博客了.. 大力推式子就行了: \(E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}+\sum_{j>i}\frac{q_j}{(j-i)^2}\) 那么要转化 ...

  6. 【洛谷P3338】力

    题目大意:求 \[ E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}} \] 题解:可以 ...

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

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

  8. P3338 [ZJOI2014]力(FFT)

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

  9. 【洛谷 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]= ...

随机推荐

  1. H3C设置vty

    [H3C]User-interface vty 0 4     //进入telnet模式 [H3C-ui-vty0-4]autchentication-mode  none       //telne ...

  2. 2018-8-10-win10-uwp-萤火虫效果

    title author date CreateTime categories win10 uwp 萤火虫效果 lindexi 2018-08-10 19:16:51 +0800 2018-2-13 ...

  3. JS逻辑运算操作

    非! 如果一个操作数是一个对象,返回false; 如果一个操作数是一个空字符串,返回true; 如果一个操作数是一个非空字符串,返回false; 如果一个操作数是一个数值0,返回true; 如果一个操 ...

  4. 【Linux】centos查看防火墙是否关闭

    查看防火墙的状态的命令为: sudo systemctl status firewalld 打开防火墙的方式有两种,一种是打开后重启会恢复回原来的状态,命令为: sudo systemctl star ...

  5. ABP在MultipleDbContext也就是多库的场景下发布后异常“Could not find content root folder”问题处理

    ABP多库支持 ABP支持多库的方案在abp的案例中aspnetboilerplate-samples中给了现成的demo,其中MultipleDbContextDemo是EF的相关针对dotnet的 ...

  6. java agent技术原理及简单实现

    注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ...

  7. 有关常用的UI组件

    前段时间想看看大家都用什么UI组件,下面是在网上搜集的,记录在这里方便自己使用和其他小伙伴使用 1:WeUI 小程序–使用教程 https://weui.io/ 官方介绍:WeUI 是一套同微信原生视 ...

  8. 第 426 期 Python 周刊

    文章,教程和讲座 端到端机器学习:从数据收集到模型部署 链接: https://ahmedbesbes.com/end-to-end-ml.html 在本文中,我们将完成构建和部署机器学习应用程序的必 ...

  9. Web基础了解版11-Ajax-JSON

    Ajax AJAX即“Asynchronous Javascript And XML”:是,不发生页面跳转.异步请求载入内容并改写局部页面内容的技术. 也可以简单的理解为通过JS向服务器发送请求.   ...

  10. Java工作流系统-父子流程的配置讲解

    父子流程 关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统 适配数据库: oralce,mysql ...