【BZOJ3527】[ZJOI2014]力

题面

bzoj

洛谷

题解

易得

\[E_i=\sum_{j<i}\frac{q_j}{(i-j)^2}-\sum_{j>i}\frac{q_j}{(i-j)^2}
\]

设\(f_i=q_i\),\(g_i=i^2\)

\[E_i=\sum_{j<i}f_jg_{i-j}-\sum_{j>i}f_jg_{i-j}
\]

将\(f\)翻转得到\(h\)

\[E_i=\sum_{j<i}f_jg_{i-j}-\sum_{j<i}h_jg_{i-j}
\]

这™就是两个卷积啊。。。

就分别\(FFT\)求出两个卷积然后一减即可

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <complex>
using namespace std;
#define sqr(x) (1.0 * (x) * (x))
typedef complex<double> Complex;
const double PI = acos(-1.0);
const int MAX_N = 3e5 + 5;
int n, N, M, P, r[MAX_N];
double q[MAX_N], ans[MAX_N];
Complex a[MAX_N], b[MAX_N];
void FFT(Complex *p, int op) {
for (int i = 0; i < N; i++) if (i < r[i]) swap(p[i], p[r[i]]);
for (int i = 1; i < N; i <<= 1) {
Complex rot(cos(PI / i), op * sin(PI / i));
for (int j = 0; j < N; j += (i << 1)) {
Complex w(1, 0);
for (int k = 0; k < i; k++, w *= rot) {
Complex x = p[j + k], y = w * p[i + j + k];
p[j + k] = x + y, p[i + j + k] = x - y;
}
}
}
} int main () {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%lf", &q[i]);
N = M = n - 1;
for (int i = 0; i <= N; i++) a[i] = q[i + 1], b[i] = 1.0 / sqr(i + 1);
M += N;
for (N = 1; N <= M; N <<= 1, ++P) ;
for (int i = 0; i < N; i++) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (P - 1));
FFT(a, 1); FFT(b, 1);
for (int i = 0; i <= N; i++) a[i] = a[i] * b[i];
FFT(a, -1);
for (int i = 2; i <= n; i++) ans[i] += (double)(a[i - 2].real() / N);
for (int i = 0; i <= N; i++) a[i].real() = b[i].real() = a[i].imag() = b[i].imag() = 0;
for (int i = 0; i < n; i++) a[i] = q[n - i], b[i] = 1.0 / sqr(i + 1);
FFT(a, 1); FFT(b, 1);
for (int i = 0; i <= N; i++) a[i] = a[i] * b[i];
FFT(a, -1);
for (int i = n - 1; i; i--) ans[i] -= (double)(a[n - i - 1].real() / N);
for (int i = 1; i <= n; i++) printf("%0.3lf\n", ans[i]);
return 0;
}

【BZOJ3527】[ZJOI3527]力的更多相关文章

  1. 【BZOJ3527】力(FFT)

    [BZOJ3527]力(FFT) 题面 Description 给出n个数qi,给出Fj的定义如下: \[Fj=\sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{ ...

  2. bzoj3527: [Zjoi2014]力 fft

    bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

  3. [bzoj3527][Zjoi2014]力_FFT

    力 bzoj-3527 Zjoi-2014 题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\lim ...

  4. 【BZOJ-3527】力 FFT

    3527: [Zjoi2014]力 Time Limit: 30 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 1544  Solved: 89 ...

  5. BZOJ3527[ZJOI]力

    无题面神题 原题意: 求所有的Ei=Fi/qi. 题解: qi被除掉了,则原式中的qj可以忽略. 用a[i]表示q[i],用b[j-i]来表示±1/((j-i)^2)(j>i时为正,j<i ...

  6. bzoj3527: [Zjoi2014]力

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. BZOJ3527[Zjoi2014]力——FFT

    题目描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi<100000 ...

  8. bzoj3527: [Zjoi2014]力 卷积+FFT

    先写个简要题解:本来去桂林前就想速成一下FFT的,结果一直没有速成成功,然后这几天断断续续看了下,感觉可以写一个简单一点的题了,于是就拿这个题来写,之前式子看着别人的题解都不太推的对,然后早上6点多推 ...

  9. 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 ...

随机推荐

  1. Centos7 之目录处理命令(八)

    linux中 关于目录 有几个重要概念 一个是 / 根目录  还有一个当前用户的家目录 比如 root用户的家目录是 /root  普通用户的家目录是/home/xxx 下 root登录 默认家目录 ...

  2. Codeforces-19D Point---线段树

    题目链接: https://cn.vjudge.net/problem/CodeForces-19D 题目大意: n个操作,在200000*200000的平面上加删点 find 严格在坐标右上角,x最 ...

  3. 2、Android-UI(常用控件)

    2.1.如何编写程序页面 Android中有许多编写程序的方式可供选择 Android Studio和Eclipse中都提供了响应的可视化编辑器 可以直接再进行拖动创建布局 推荐使用手动编写方式进行开 ...

  4. 一次傻叉的安装ubuntu虚拟机记录

    因为最近要做一些开发工作,涉及到游戏前后端到的开发,在将代码上传到github之前,所有开发版本的源文件都保存在我的虚拟机svn仓库.所以,就装了两台虚拟机,一台用作svn仓库以及git同步与更新,另 ...

  5. c#中的结构

    1.在c#中,结构是值类型的数据结构,它可以使用一个单一的变量存储各种数据类型的相关数据,使用Struct关键字进行声明. 2.C#中结构的特点: (1)结构中可以有字段,属性,方法,运算表达式,事件 ...

  6. ThinkPHP微信扫码支付接口

    最近折腾微信扫码支付,看了微信官方文档,找了很多网页,发现和文档/demo不匹配,现在自己算是弄出来了(文件名称有所更改),贴出来分享一下 一.将有用的官方lib文件和使用的相关文件放置到vendor ...

  7. 关于 web.config impersonate 帐号模拟

    1.模拟 IIS 验证的帐户或用户 若要在收到 ASP.NET 应用程序中每个页的每个请求时模拟 Microsoft Internet 信息服务 (IIS) 身份验证用户,必须在此应用程序的 Web. ...

  8. vue bus方式解决非父子组件间的传值

    对于非父子组件之间的传值 通常使用VUEX 和总线等方式解决 这里我聊聊发布订阅模式(总线) <body> <div class="app"> <ch ...

  9. day 33 线程

    1.线程理论 什么是线程:线程是cpu的最小执行单位(实体),进程是操作系统的数据资源分配单位   2.线程的两种创建方式(重点) 查看线程的pid:使用os模块查看id,线程的id应该是相同的 3. ...

  10. 大数据学习:Spark是什么,如何用Spark进行数据分析

    给大家分享一下Spark是什么?如何用Spark进行数据分析,对大数据感兴趣的小伙伴就随着小编一起来了解一下吧.     大数据在线学习 什么是Apache Spark? Apache Spark是一 ...