题意

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

\[F_j=\sum \limits _ {i < j} \frac{q_iq_j}{(i-j)^2}-\sum \limits _{i >j} \frac{q_iq_j}{(i-j)^2}.
\]

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

题解

一开始没发现求\(E_i\)... 其实题目还更容易想了...

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

这个东西就是转换成求两个一样的东西就行了。

就是求$$sum_i=\sum \limits_{j<i} \frac{q_j}{(i-j)^2}$$.

这个就是可以转换成求一个卷积形式就行了。

注意多项式乘法格式是这样的:

\[A_0+A_1x+...+A_nx^n
\]

\[B_0+B_1x+...+B_nx^n
\]

令\(A\)与\(B\)的卷积为\(C\),则$$C_i=\sum \limits {j \le i}A_j*B{i-j}$$.

发现\(i-j\)那个形式似乎就可以满足本题的形式。

所以令\(B_i=\frac{1}{i^2}\)就行了,然后\(A_i=q_i\).

对于这个求两边卷积就行了23333

注意有的细节要处理一下,就是要清空一些数组,

注意一下下标(思维要清楚),而且也要令\(A_0=B_0=0\)。

而且之前求\(B_i\)的时候,\(i^2\)会爆long long !

代码

/**************************************************************
Problem: 3527
User: zjp_shadow
Language: C++
Result: Accepted
Time:3688 ms
Memory:32012 kb
****************************************************************/
#include <bits/stdc++.h>
#define For(i, l, r) for(register int i = (l), _end_ = (int)(r); i <= _end_; ++i)
#define Fordown(i, r, l) for(register int i = (r), _end_ = (int)(l); i >= _end_; --i)
#define Set(a, v) memset(a, v, sizeof(a))
using namespace std; bool chkmin(int &a, int b) {return b < a ? a = b, 1 : 0;}
bool chkmax(int &a, int b) {return b > a ? a = b, 1 : 0;} inline int read() {
int x = 0, fh = 1; char ch = getchar();
for (; !isdigit(ch); ch = getchar() ) if (ch == '-') fh = -1;
for (; isdigit(ch); ch = getchar() ) x = (x<<1) + (x<<3) + (ch ^ '0');
return x * fh;
} void File() {
#ifdef zjp_shadow
freopen ("P3527.in", "r", stdin);
freopen ("P3527.out", "w", stdout);
#endif
} struct Complex {
double re, im;
}; inline Complex operator + (const Complex &lhs, const Complex &rhs) {
return (Complex) {lhs.re + rhs.re, lhs.im + rhs.im};
} inline Complex operator - (const Complex &lhs, const Complex &rhs) {
return (Complex) {lhs.re - rhs.re, lhs.im - rhs.im};
} inline Complex operator * (const Complex &lhs, const Complex &rhs) {
return (Complex) {lhs.re * rhs.re - lhs.im * rhs.im, lhs.re * rhs.im + rhs.re * lhs.im};
} const int N = 1 << 19;
int n_, n;
double f[N], g[N];
const double Pi = acos(-1.0); int r[N]; void FFT(Complex P[], int opt) {
For (i, 0, n - 1) if (i < r[i]) swap(P[i], P[r[i]]);
for (int i = 2; i <= n; i <<= 1) {
Complex Wi = (Complex) {cos(2 * Pi / i), opt * sin(2 * Pi / i)};
int p = i / 2;
for (int j = 0; j < n; j += i) {
Complex x = (Complex) {1.0, 0.0};
For (k, 0, p - 1) {
Complex u = P[j + k], v = x * P[j + k + p];
P[j + k] = u + v;
P[j + k + p] = u - v;
x = x * Wi;
}
}
}
} int m;
void Mult(Complex a[], Complex b[]) {
int cnt = 0;
for (n = 1; n <= m; n <<= 1) ++ cnt;
For (i, 1, n - 1)
r[i] = (r[i >> 1] >> 1) | ((i & 1) << (cnt - 1) );
FFT(a, 1); FFT(b, 1);
For (i, 0, n - 1) a[i] = a[i] * b[i];
FFT(a, -1);
For (i, 0, n - 1) a[i].re = a[i].re / n;
} double ans[N];
Complex a[N], b[N]; int main () {
//int n1 = read(), n2 = read(),
File();
n_ = read();
m = n_ + n_;
For (i, 1, n_) {
scanf("%lf", &f[i]);
g[i] = (double)1.0 / ((long long)i * (long long)i);
}
For (i, 0, n_) a[i].re = f[i], a[i].im = 0;
For (i, 0, n_) b[i].re = g[i], b[i].im = 0;
Mult(a, b);
For (i, 1, n_)
ans[i] += a[i].re; reverse(f + 1, f + 1 + n_);
For (i, 0, n - 1) a[i].re = f[i], a[i].im = 0;
For (i, 0, n - 1) b[i].re = g[i], b[i].im = 0; Mult(a, b); For (i, 1, n_)
ans[n_ - i + 1] -= a[i].re; For (i, 1, n_)
printf ("%.4lf\n", ans[i]);
return 0;
}

BZOJ 3527: [ZJOI2014]力(FFT)的更多相关文章

  1. bzoj 3527 [Zjoi2014]力——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...

  2. bzoj 3527 [Zjoi2014] 力 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 看了看TJ才推出来式子,还是不够熟练啊: TJ:https://blog.csdn.n ...

  3. BZOJ 3527: [Zjoi2014]力(FFT)

    我们看一下这个函数,很容易就把他化为 E=sigma(aj/(i-j)/(i-j))(i>j)-sigma(aj/(i-j)/(i-j))(j>i) 把它拆成两半,可以发现分子与分母下标相 ...

  4. BZOJ 3527 [Zjoi2014]力 ——FFT

    [题目分析] FFT,构造数列进行卷积,挺裸的一道题目诶. 还是写起来并不顺手,再练. [代码] #include <cmath> #include <cstdio> #inc ...

  5. 【BZOJ】3527: [Zjoi2014]力 FFT

    [参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...

  6. ●BZOJ 3527 [Zjoi2014]力

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题解: FFT求卷积. $$\begin{aligned}E_i&=\frac ...

  7. 数学(FFT):BZOJ 3527 [Zjoi2014]力

    题目在这里:http://wenku.baidu.com/link?url=X4j8NM14MMYo8Q7uPE7-7GjO2_TXnMFA2azEbBh4pDf7HCENM3-hPEl4mzoe2w ...

  8. bzoj 3527: [Zjoi2014]力 快速傅里叶变换 FFT

    题目大意: 给出n个数\(q_i\)定义 \[f_i = \sum_{i<j}{\frac{q_iq_j}{(i-j)^2}} - \sum_{i>j}\frac{q_iq_j}{(i-j ...

  9. bzoj 3527: [Zjoi2014]力【FFT】

    大力推公式,目标是转成卷积形式:\( C_i=\sum_{j=1}^{i}a_jb_{i-j} \) 首先下标从0开始存,n-- \[ F_i=\frac{\sum_{j<i}\frac{q_j ...

随机推荐

  1. 《Discuz安装时候出现乱码 -- 问题解决方法》

    自我安装discuz时出现安装界面乱码的情况,跟链接所说一样,经过原作的分享,加上我自己的实验,明白了,什么时候修改/usr/local/php/etc/php.ini里面的default_chars ...

  2. php获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){ return ''; } $fchar = ord($str{0}) ...

  3. C# 托管堆和垃圾回收器GC

    这里我们讨论的两个东西:托管堆和垃圾回收器,前者是负责创建对象并控制这些对象的生存周期,后者负责回收这些对象. 一.托管堆分配资源 CLR要求所有的对象都从托管堆分配.进程初始化时,CLR划出一个地址 ...

  4. return的新思考

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  5. 收藏清单: python测试框架最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...

  6. nyoj1204 魔法少女 线性DP

    d[i][0]表示到达第i层,且在第i层没有使用魔法的最少时间 d[i][1]表示到达第i层,且在第i层使用魔法通过一层 d[i][2]表示到达第i层,且在第i层使用魔法通过两层 状态转移方程: d[ ...

  7. Pymongo一些常见需求(陆续补充)

    总结一下最近包括之前遇到的一些pymongo操作的问题. #需求1: 搜索文档数组里边是否存在某元素 数据: data1 = { '_id': xxxxxxxxxxxxxx, 'dataList': ...

  8. Hbase的存储

    Hbase在生态系统中的位置 Hbase存储的逻辑视图 Hbase的存储格式 Hbase写数据流程 Hbase快速响应数据 Hbase在生态系统中的位置 HBase位于结构化存储层,Hadoop HD ...

  9. java-数据库连接,分层实现增删改查测试

    成员属性类: public class Dog { private int number; private String name; private String strain; private St ...

  10. 深度拾遗(06) - 1X1卷积/global average pooling

    什么是1X1卷积 11的卷积就是对上一层的多个feature channels线性叠加,channel加权平均. 只不过这个组合系数恰好可以看成是一个11的卷积.这种表示的好处是,完全可以回到模型中其 ...