【问题描述】
给出n个数qi,给出Fj的定义如下:
令Ei=Fi/qi。试求Ei。
【输入格式】
输入文件force.in包含一个整数n,接下来n行每行输入一个数,第i行表示qi。
【输出格式】
输出文件force.out有n行,第i行输出Ei。与标准答案误差不超过1e-2即可。
【样例输入】
5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880
【样例输出】
-16838672.693
3439.793
7509018.566
4595686.886
10903040.872
【数据规模与约定】
对于30%的数据,n≤1000。
对于50%的数据,n≤60000。
对于100%的数据,n≤100000,0<qi<1000000000。

【分析】

这道题...在省选里面相当裸了。

自己把式子展开一下,发现跟卷积是类似的。

于是对公式的前半部分做一下FFT,后半部分再做一下FFT,减一下,然后就是公式的样子了。

感觉对FFT的理解更进一步了。

 /*
宋代苏轼
《临江仙·夜饮东坡醒复醉》
夜饮东坡醒复醉,归来仿佛三更。家童鼻息已雷鸣。敲门都不应,倚杖听江声。
长恨此身非我有,何时忘却营营。夜阑风静縠纹平。小舟从此逝,江海寄余生。
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <iostream>
#include <string>
#include <ctime>
#define LOCAL
const double Pi = acos(-1.0);
const int MAXN = * * + ;
using namespace std;
struct Num{
double a, b;
Num(double x = , double y = ){a = x; b = y;}
Num operator + (const Num &c){return Num(a + c.a, b + c.b);}
Num operator - (const Num &c){return Num(a - c.a, b - c.b);}
Num operator * (const Num &c){return Num(a * c.a - b * c.b, a * c.b + b * c.a);}
}x1[MAXN], x2[MAXN];
double data[MAXN], Ans[MAXN];
int n;
//交换成蝴蝶顺序
void change(Num *t, int len, int loglen){
for (int i = ; i < len; i++){
int k = , x = i, tmp = loglen;
while (tmp--) {k = (k<<) + (x & );x >>= ;}
if (k < i) swap(t[k], t[i]);
}
return;
}
//0为逆向
void FFT(Num *x, int len, int loglen, int type){
if (type) change(x, len, loglen);
int t;//t代表长度
t = (type ? : (<<loglen));
for (int i = ; i < loglen; i++){
if (!type) t >>= ;
int l = , r = l + t;
while (l < len){
Num a, b;//临时变量
Num tmp(, ), w(cos(Pi / t), (type ? : -) * sin(Pi / t));
for (int j = l; j < l + t; j++){
if (type){
a = x[j];
b = x[j + t] * tmp;
x[j] = a + b;
x[j + t] = a - b;
}else{
a = x[j] + x[j + t];
b = (x[j] - x[j + t]) * tmp;
x[j] = a;
x[j + t] = b;
}
tmp = tmp * w;
}
l = r + t;
r = l + t;
}
if (type) t <<= ;
}
if (!type){
change(x, len, loglen);
for (int i = ; i < len; i++) x[i].a /= len;
}
}
void init(){
memset(x1, , sizeof(x1));
memset(x2, , sizeof(x2));
int len = ;
while (( << len) < n) len++;
len++;
for (int i = ; i < n; i++) x1[i] = Num(data[i], );
for (int i = ; i < n; i++) x2[i] = Num((double)1.0 / (double)(i * (double)i), );
//for (int i = 1; i < n; i++) printf("%lf\n", x2[i].a); FFT(x1, (<<len), len, );
FFT(x2, (<<len), len, );
for (int i = ; i < ( << len); i++) x1[i] = x1[i] * x2[i];
FFT(x1, (<<len), len, );
}
void debug(){
int len = ;
scanf("%d", &n);
while ((<<len) <= (n << )) len++;
for (int i = ; i < n; i++) scanf("%lf", &x1[i].a);
for (int i = ; i < n; i++) scanf("%lf", &x2[i].a);
FFT(x1, (<<len), len, );
FFT(x2, (<<len), len, );
for (int i = ; i < ( << len); i++) x1[i] = x1[i] * x2[i];
FFT(x1, (<<len), len, );
for (int i = ; i < n; i++) printf("%lf\n", x1[i].a);
} int main() { scanf("%d", &n);
for (int i = ; i < n; i++) scanf("%lf", &data[i]);
init();
for (int i = ; i < n; i++) Ans[i] = x1[i].a;
reverse(data, data + n);
init();
for (int i = ; i < n; i++) Ans[i] -= x1[n - - i].a;
for (int i = ; i < n; i++) printf("%.3lf\n", Ans[i]);
//debug();
return ;
}

【BZOJ3527】【FFT】力的更多相关文章

  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. 【BZOJ-3527】力 FFT

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

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

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

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

  6. BZOJ3527 [Zjoi2014]力 【fft】

    题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...

  7. [BZOJ3527][ZJOI2014]力 FFT+数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们 ...

  8. [BZOJ3527][ZJOI2014]力:FFT

    分析 整理得下式: \[E_i=\sum_{j<i}{\frac{q_i}{(i-j)^2}}-\sum_{j>i}{\frac{q_i}{(i-j)^2}}\] 假设\(n=5\),考虑 ...

  9. BZOJ3527[Zjoi2014]力——FFT

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

  10. [bzoj3527][Zjoi2014]力_FFT

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

随机推荐

  1. android camera(四):camera 驱动 GT2005

    摄像头主要参数: 1.MCLK  24MHz: 2.PCLK  48~52MHz~: 3.电压 1.8V(1.5V).2.8V: 4.scl(IIC时钟)100KHz或者400KHz. 下载:常用摄像 ...

  2. WPP

    WPP(Wavefront Parallel Processing) 上一行的第二个LCU处理完毕,即对当前行的第一个LCU的熵编码(CABAC)概率状态参数进行初始化,如图5所示.因此,只需要上一行 ...

  3. 支持Python 2.7的pylot

    想用pylot测试一下板子上面的嵌入式web server.结果报错. E:\pylot_1.26>run.py -a 2 Traceback (most recent call last): ...

  4. 依据linux Oops信息准确定位错误代码所在行

    在linux下调tvp5150am1的过程中,遇到了一kernel oops,内容如下: [   66.714603] Unable to handle kernel paging request a ...

  5. Prebrowsing

    同事推荐的文章: http://www.stevesouders.com/blog/2013/11/07/prebrowsing/

  6. myeclipse输入“.”后没有自动提示功能

    今天和室友安装了一样的myeclipse版本,结果室友的自动提示功能有,我的输入"."后却不能提示,这对我们敲代码简直来说是一个折磨,不能自动提示,本来还以为是系统问题,一个是wi ...

  7. Yii2 验证码

    没有用默认的layout  验证码点击不会改变 下面是静态页面代码 <div class="col-sm-12 login"> <div class=" ...

  8. eclipse中建立tomcat容器

    步骤 1.  new - orther - server 出现下图,选择tomcat版本, 2. 选择已有的web项目至tomcat容器中,如果尚未建立,可不选. 3. 点击完成后,就会发现一个新建项 ...

  9. tomcat报错:This is very likely to create a memory leak问题解决

    tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因  在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ...

  10. (转)tar 解压缩命令

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...