P3338 [ZJOI2014]力

题目描述

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

\(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i q_j}{(i-j)^2 }\)

令\(E_i=\frac{F_i}{q_i}\),求\(E_i\).

输入输出格式

输入格式:

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

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

输出格式:

\(n\)行,第\(i\)行输出\(E_i\)。

与标准答案误差不超过\(10^{-2}\)即可。

说明

对于\(30\%\)的数据,\(n\le1000\)。

对于\(50\%\)的数据,\(n\le60000\)。

对于\(100\%\)的数据,\(n\le100000\),\(0<qi<1000000000\)。

[spj 0.01]


鉴于本傻子一开始啥也看不出来还是写一写好了。

把两边分开考虑。令\(f(x)=\frac{1}{x^2},g(x)=q_x\),然后发现就是\(FFT\)的形式,看成系数做就可以了。

右边转过来以后同理。

有一些细节比如

  • 1/(i*i)会被卡精度,要写1/i/i
  • \(f(0)=g(0)=0\)

Code:

#include <cstdio>
#include <cmath>
#include <algorithm>
const int N=(1<<18)+10;
struct complex
{
double x,y;
complex(){}
complex(double x,double y){this->x=x,this->y=y;}
complex friend operator +(complex n1,complex n2){return complex(n1.x+n2.x,n1.y+n2.y);}
complex friend operator -(complex n1,complex n2){return complex(n1.x-n2.x,n1.y-n2.y);}
complex friend operator *(complex n1,complex n2){return complex(n1.x*n2.x-n1.y*n2.y,n1.x*n2.y+n1.y*n2.x);}
}a[N],b[N],tmpx,tmpy,wn,w;
const double pi=3.1415926535897632;
int n,turn[N],len=1,L=-1;
double out[N],q[N];
void FFT(complex *a,int typ)
{
for(int i=0;i<len;i++)
if(i<turn[i])
std::swap(a[i],a[turn[i]]);
for(int le=1;le<len;le<<=1)
{
wn=complex(cos(pi/le),typ*sin(pi/le));
for(int p=0;p<len;p+=le<<1)
{
w=complex(1,0);
for(int i=p;i<p+le;i++,w=w*wn)
{
tmpx=a[i],tmpy=w*a[i+le];
a[i]=tmpx+tmpy,a[i+le]=tmpx-tmpy;
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf",q+i);
for(int i=1;i<=n;i++) a[i].x=q[i],b[i].x=1.0/i/i;
while(len<=n+1<<1) len<<=1,++L;
for(int i=0;i<len;i++) turn[i]=turn[i>>1]>>1|(i&1)<<L;
FFT(a,1),FFT(b,1);
for(int i=0;i<len;i++) a[i]=a[i]*b[i];
FFT(a,-1);
for(int i=1;i<=n;i++) out[i]+=a[i].x/len;
for(int i=0;i<len;i++) a[i]=complex(0,0);
for(int i=1;i<=n;i++)
a[n+1-i]=complex(q[i],0);
FFT(a,1);
for(int i=0;i<len;i++) a[i]=a[i]*b[i];
FFT(a,-1);
for(int i=1;i<=n;i++) out[n+1-i]-=a[i].x/len;
for(int i=1;i<=n;i++) printf("%lf\n",out[i]);
return 0;
}

2018.12.3

洛谷 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]力(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}$ ...

  3. 洛谷 P3338 [ZJOI2014]力

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

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

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

  5. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  6. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  7. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  8. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  9. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

随机推荐

  1. TCP的三次握手和四次分手

    TCP的三次握手 图解:     • 第一次握手:客户端发送syn包到服务器,并进入syn_send状态,等待服务器进行确认: • 第二次握手:服务器收到客户端的syn包,必须确认客户的SYN,同时自 ...

  2. NumPy v1.15手册汉化

    NumPy参考 数组创建 零 和 一 empty(shape[, dtype, order]):返回给定形状和类型的新数组,而不初始化条目 empty_like(prototype[, dtype,  ...

  3. Python接口测试实战3(上)- Python操作数据库

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  4. iOS开发之多线程技术—GCD篇

    本篇将从四个方面对iOS开发中GCD的使用进行详尽的讲解: 一.什么是GCD 二.我们为什么要用GCD技术 三.在实际开发中如何使用GCD更好的实现我们的需求 一.Synchronous & ...

  5. 利用xlsxwriter生成数据报表

    #!/usr/bin/env python# -*- coding:utf-8 -*-import os,xlsxwriter,datetimeimport ConfigParserfrom send ...

  6. JAVA学习笔记--迭代器

    迭代器(Iterator)是一种设计模式.它是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构.创建迭代器的代价小,因而迭代器通常被称为轻量级对象. 一.Ite ...

  7. 论文笔记:Fully-Convolutional Siamese Networks for Object Tracking

    Fully-Convolutional Siamese Networks for Object Tracking 本文作者提出一个全卷积Siamese跟踪网络,该网络有两个分支,一个是上一帧的目标,一 ...

  8. MD5加密字符串--基于python

    import hashlib#md5加密32位def md5(str): import hashlib m = hashlib.md5() m.update(str) return m.hexdige ...

  9. php memcache 使用学习

    Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任 ...

  10. Manacher算法——求最长回文子串

    首先,得先了解什么是回文串.回文串就是正反读起来就是一样的,如“abcdcba”.我们要是直接采用暴力方法来查找最长回文子串,时间复杂度为O(n^3),好一点的方法是枚举每一个字符,比较较它左右距离相 ...