Problem

Description

给出 \(n\) 个数 \(q_i\),给出 \(F_j\) 的定义如下:

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

令 \(E_i=F_i/q_i\),求 \(E_i\)。

Input Format

第一行一个整数\(n\)。

接下来 \(n\) 行每行输入一个数,第 \(i\) 行表示 \(q_i\)。

Output Format

\(n\) 行,第 \(i\) 行输出 \(E_i\)。与标准答案误差不超过 \(10^{-2}\) 即可。

Sample

Input

5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880

Output

-16838672.693
3439.793
7509018.566
4595686.886
10903040.872

Range

对于所有的数据,\(n\leq 100000,\ 0<q_i<10^9\)。

Algorithm

多项式

Mentality

\[E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(j-i)^2}
\]

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

\[E_i=\sum_{j=1}^{i-1}q_jg_{i-j}-\sum_{j=i+1}^nq_jg_{j-i}
\]

单独算每个 \(E_i\) 的前一部分,再算所有 \(E_i\) 的后一部分。

由于 \(q_0=g_0=0\) ,则对于:

\[\sum_{j=1}^{i-1}q_jg_{i-j}=\sum_{j=0}^{i}q_jg_{i-j}
\]

直接 \(FFT\) 求得。

对于后一部分,将 \(q\) 数组翻转得到数组 \(p\) 。

则有:

\[\sum_{j=i+1}^nq_jg_{j-i}=\sum_{j=0}^{n-i+1}p_jg_{n-i+1-j}
\]

同样直接 \(FFT\) 计算。

Code

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
using namespace std;
#define cp complex<double>
const int Max_n = 3e5 + 5;
const double pi = acos(-1);
int n;
int rev[Max_n];
double dv[Max_n], ans[Max_n], q[Max_n];
cp f[Max_n], g[Max_n];
namespace FFT {
int lim, bit;
void dft(cp *f, int t) {
for (int i = 0; i < lim; i++)
if (rev[i] > i) swap(f[rev[i]], f[i]);
for (int len = 1; len < lim; len <<= 1) {
cp Wn = exp(cp(0, t * pi / len));
for (int i = 0; i < lim; i += len << 1) {
cp Wnk(1, 0);
for (int k = i; k < i + len; k++, Wnk *= Wn) {
cp x = f[k], y = Wnk * f[k + len];
f[k] = x + y, f[k + len] = x - y;
}
}
}
}
void fft(double *a, double *b, int tot) {
lim = 1, bit = 0;
while (lim <= tot) lim <<= 1, bit++;
for (int i = 0; i < lim; i++)
rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1));
for (int i = 0; i < lim; i++) f[i] = a[i], g[i] = b[i];
dft(f, 1), dft(g, 1);
for (int i = 0; i < lim; i++) f[i] *= g[i];
dft(f, -1);
for (int i = 0; i < lim; i++) f[i] /= lim;
}
} // namespace FFT
using namespace FFT;
int main() {
#ifndef ONLINE_JUDGE
freopen("3338.in", "r", stdin);
freopen("3338.out", "w", stdout);
#endif
cin >> n;
for (int i = 1; i <= n; i++) scanf("%lf", &q[i]);
for (int i = 1; i <= n; i++) dv[i] = (double)(1.0 / i / i);
fft(q, dv, n << 1);
for (int i = 1; i <= n; i++) ans[i] += f[i].real();
reverse(q + 1, q + n + 1);
fft(q, dv, n << 1);
for (int i = 1; i <= n; i++)
printf("%.2lf\n", (ans[i] -= f[n - i + 1].real()));
}

【ZJOI 2014】力的更多相关文章

  1. [ZJOI 2014]力

    Description 给出n个数qi,给出Fj的定义如下: $$F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i ...

  2. 解题:ZJOI 2014 力

    题面 事实说明只会FFT板子是没有用的,还要把式子推成能用FFT/转化一下卷积的方式 虽然这个题不算难的多项式卷积 稍微化简一下可以发现实际是$q_i$和$\frac{1}{(i-j)^2}$在卷,然 ...

  3. 【BZOJ 3527】【ZJOI 2014】力

    代换一下变成多项式卷积,这里是的答案是两个卷积相减,FFT求一下两个卷积就可以啦 详细的题解:http://www.cnblogs.com/iwtwiioi/p/4126284.html #inclu ...

  4. ZJOI 2014 星系调查(推导)

    题意 https://loj.ac/problem/2201 思路 说白了就是一条路径上有 \(n\) 个二维坐标,求一条直线使得所有点到此直线的距离和最小. 设这条直线为 \(y=kx+b\) ,距 ...

  5. php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库、PDO教程]

    php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库.PDO教程] 第14章 数据库252.[2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库[已发布,点击下载]253. ...

  6. php大力力 [016节] 兄弟连高洛峰php教程(2014年 14章数据库章节列表)

    2015-08-25 php大力力016 兄弟连高洛峰php教程(2014年 14章数据库章节列表) [2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库  15:58 [2014]兄弟连高洛 ...

  7. php大力力 [045节] 兄弟连高洛峰 PHP教程 2014年[已发布,点击下载]

    http://www.verycd.com/topics/2843130/ 第1部分 WEB开发入门篇第1章LAMP网站构建1.[2014]兄弟连高洛峰 PHP教程1.1.1 新版视频形式介绍[已发布 ...

  8. BZOJ3527[ZJOI]力

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

  9. zjoi 力

    显然fft维护卷积就可以了 发现fft里面会改变很多东西 要还原一下 #include <bits/stdc++.h> #define dob complex<double> ...

随机推荐

  1. static介绍、内部类、final、权限修饰符的作用范围

    static 关键字:(可用于修饰方法.变量)     static 特点:         static是静态修饰符,一般修饰成员变量.被static修饰的属于全局共享.被static修饰的成员属于 ...

  2. Java中接口和抽象类的区别?

    抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...

  3. C++错误unresolved external symbol _WinMain@16

    C++错误unresolved external symbol _WinMain@16 Linking...  LIBCD.lib(wincrt0.obj) : error LNK2001: unre ...

  4. Linux服务器可以ping,但是telnet端口超时,网站wget超时,访问超时的解决办法

    最近无法通过SSH连接Linux服务器,访问该服务器上的HTTP服务也出现异常.可以ping,但是telnet端口超时,网站wget超时,访问超时. 最后排查是内核配置问题 原来是 net.ipv4. ...

  5. Windows Terminal 美化分享

    美化前:  美化后: Json分享: { "acrylicOpacity": 0.75, "closeOnExit": true, "colorSch ...

  6. 爬虫(六):XPath、lxml模块

    1. XPath 1.1 什么是XPath XPath(XML Path Language) 是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 1.2 ...

  7. k8s~k8s里的服务Service

    k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 服务Service 1.1 Service Kubernetes中一个应用服务会有一个 ...

  8. 面试连环炮系列(九):为什么ConcurrentHashMap是线程安全的

    为什么ConcurrentHashMap是线程安全的 JDK1.7中,ConcurrentHashMap使用的锁分段技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一 ...

  9. 【性能测评】DSP库,MDK5的AC5,AC6,IAR和Embedded Studio的三角函数性能

    测试条件: 1.IAR8.30开最高等级速度优化. 2.MDK5.27正式版使用AC5开最高等级优化3,开启时间优化,测试C标准库和微库MicroLib两种. 3.MDK5.27正式版使用AC6开最高 ...

  10. .net core 3.0web_razor page项目_使用中间件接受大文件上传报错_httpRequest.Form threw an exception of type Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException_Request body too large

    前言:在web项目的.net framework时文件上传时,自己常用一般处理程序接受上传文件,上传文件的大小限制是可以项目的webconfig里配置.   到core项目使用一般处理程序变成了中间件 ...