FFT

\[E_i = F_i / q_i = \sum_{i<j} \frac {q_j} {(i - j)^2} - \sum _{ i > j} \frac{q _ j} {(i - j)^2}\]

设 \(p _ i = q_{n - i}\) \(g(i) = \frac 1 {i^2}\)

则 \(E_i = \sum_{j=1}^{i-1} q _ i g(j - i) - \sum _ {j = i + 1} ^ n q_j g(i - j)\)

即 \(E_i = \sum_{j=1}^{i-1} q_i g(i-1) - \sum_{j=1}^{n - i} p_i g(i - j)\)

我们发现这是一个卷积的形式, 可以用 FFT 处理

cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int MAXN = 400005; const double PI = acos(-1); struct Complex { double x, y; Complex(double xx = 0.0, double yy = 0.0) { x = xx; y = yy; } Complex operator + (const Complex &u) const { return Complex(x + u.x, y + u.y); } Complex operator - (const Complex &u) const { return Complex(x - u.x, y - u.y); } Complex operator * (const Complex &u) const{ return Complex(x * u.x - y * u.y, x * u.y + y * u.x); } }a[MAXN], b[MAXN], c[MAXN], buf[MAXN]; int n, lim = 1, limcnt, rev[MAXN]; void fft(Complex a[], int opt) { for(int i = 0; i <= lim; i++) { if(i < rev[i]) swap(a[i], a[rev[i]]); } for(int mid = 1; mid < lim; mid <<= 1) { Complex wn = Complex(cos(PI / mid), opt * sin(PI / mid)); for(int R = mid << 1, j = 0; j < lim; j += R) { Complex w = Complex(1.0, 0.0); for(int k = 0; k < mid; k++) { Complex x = a[j + k], y = w * a[j + mid + k]; a[j + k] = x + y; a[j + mid + k] = x - y; w = w * wn; } } } if(opt == -1) { for(int i = 0; i <= lim; i++) a[i].x = a[i].x / lim; } } int main() { cin >> n; for(int i = 1; i <= n; i++) { scanf("%lf", &a[i].x); b[n - i].x = a[i].x; c[i].x = (1.0 / (double)i) / (double)i; } while(lim <= (n << 1)) lim <<= 1, limcnt++; for(int i = 0; i <= lim; i++) { rev[i] = (rev[i>>1]>>1) | ((i&1)<<(limcnt - 1)); } fft(a, 1);fft(b, 1); fft(c, 1); for(int i = 0; i <= lim; i++) a[i] = a[i] * c[i]; for(int i = 0; i <= lim; i++) b[i] = b[i] * c[i]; fft(a, -1); fft(b, -1); for(int i = 1; i <= n; i++) { printf("%.4f\n", a[i].x - b[n - i].x); } return 0; }

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

  1. 洛谷P3338 力

    题意: 解: 介绍两种方法. 首先可以把那个最后除的qi拆掉. ①分前后两部分处理. 前一部分可以看做是个卷积.下面的平方不拆开,直接看成gi-j即可. 后一部分按照套路,把循环变量改成从0开始,反转 ...

  2. [洛谷P3338] [ZJOI2014]力

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

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

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

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

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

  6. 洛谷 P3338 [ZJOI2014]力

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

  7. 【洛谷P3338】力

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

  8. [bzoj3527] [洛谷P3338] [Zjoi2014]力

    Description 给出n个数qi,给出Fj的定义如下: \[ F_j=\sum\limits_{i<j} \frac{q_iq_j}{(i-j)^2} - \sum\limits_{i&g ...

  9. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

随机推荐

  1. 爬虫学习(九)——登录获取cookie爬取

    import urllib.requestimport urllib.parseimport http.cookiejar # http.cookiejar 该包是专门对网页的cookie只进行获取的 ...

  2. 三、MySQL PHP 语法

    MySQL PHP 语法 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP. 在这些语言中,Mysql在PHP的web开发中是应用最广泛. 在本教程中我们大部分实例 ...

  3. 第2章 CentOS7集群环境配置

    目录 2.1 关闭防火墙 2.2 设置固定IP 2.3 修改主机名 2.4 添加用户 2.5 修改用户权限 2.6 新建目录 2.7 安装JDK 1.卸载系统自带的JDK 2.安装JDK 2.8 克隆 ...

  4. django实现事务

    1.导入模块 from django.db import transaction 2.使用方法 with transaction.atomic(): User.objects.create(name= ...

  5. Hive UDTF开发指南

    在这篇文章中,我们将深入了解用户定义表函数(UDTF),该函数的实现是通过继承org.apache.Hadoop.hive.ql.udf.generic.GenericUDTF这个抽象通用类,UDTF ...

  6. SharedPreferences使用(通过键值保存数据)

    保存数据到SharedPreferences中 要想使用SharedPreferences来存储数据, 首先需要获取到SharedPreferences对象. Android中主要提供了三种方法用于得 ...

  7. Collection record

    复习大集合: 1.函数的参数:位置参数,关键字参数,动态参数 2.命名空间:内置命名空间,全局命名空间,局部命名空间 3.闭包函数:函数引用未定义的函数外非全局的变量叫做闭包,该函数称为闭包函数 4. ...

  8. vue2.x生命周期

    vue2.x生命周期 1. beforeCreate 在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用. 2. created 实例已经创建 ...

  9. 使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法

    由于园子里有不少用户在使用dnspod,我们觉得有必要将这两天blogjava.net域名在dsnpod遇到的奇特问题分享一下,以免再有人踩着这个坑. 12月11日,我们登录到dnspod的后台时,大 ...

  10. leetcode 【 Search for a Range 】python 实现

    题目: Given a sorted array of integers, find the starting and ending position of a given target value. ...