题意

给出\(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: 3527User: zjp_shadowLanguage: C++Result: AcceptedTime:3688 msMemory: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_shadowfreopen ("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;
}

转载于:https://www.cnblogs.com/zjp-shadow/p/8435930.html

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)

    题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...

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

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

  4. BZOJ 3527: [Zjoi2014]力

    题目地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题目大意:见原题. 算法讨论: 设A[i]=q[i],B[i]=1/(i^2). 设 ...

  5. BZOJ 3527 [Zjoi2014] 力

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

  6. P3338 [ZJOI2014]力 FFT + 推式子

    传送门 文章目录 题意: 思路: 题意: 思路: 这个式子看起来很FFTFFTFFT,让我们来化简一下. 考虑EEE中直接将qiq_iqi​约掉,所以Ei=∑j=1i−1qj(i−j)2−∑j=i+1 ...

  7. P3338 [ZJOI2014]力 [FFT]

    P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力 给出n个数qi,给出Fj的定义如下: Fj=∑i<jqiqj(i−j)2−∑i>jqiq ...

  8. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...

  9. BZOJ3527:[ZJOI2014]力(FFT)

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

最新文章

  1. 【GStreamer】在x264enc中设置profile级别
  2. tomcat结构分析
  3. Ubuntu14-04安装redis和php5-redis扩展
  4. 转:Ubuntu下下载工具安装--uget+aria2
  5. Linux高级编程实验(30个)
  6. STM32工作笔记0009---认识FSMC和TTL电路
  7. 自己写的一个执行带参数的sql,PreparedStatement
  8. 通用计算机dsp采用,一种基于FPGA+DSP的通用飞控计算机平台设计
  9. 数理统计实(试)验—双因素方差分析(无交互作用)excel操作分析方差分析表怎么看?
  10. 行为决策学入门书籍推荐《别做正常的傻瓜》
  11. 链家网爬取深圳租房信息并存入MySQL
  12. 2022化工自动化控制仪表考试试题及模拟考试
  13. Android Things发布新版本DP7,NXP和树莓派开发板可升级
  14. 啊哈算法-DFS解救小哈python版
  15. 我的世界java爱冰雪女王_我的世界美丽而又高冷 冰雪女王介绍
  16. 提升汽车APP用户体验,火山引擎APMPlus的“独家秘笈”
  17. java实现24点经典游戏
  18. Advanced Zip Password Recovery下载
  19. 中国海洋大学计算机考研资料汇总
  20. oracle 查看PACKAGE里的函数代码

热门文章

  1. python在线问卷调查系统源代码_基于Python 练习1情况的在线问卷
  2. vue动态生成下拉框_vue+elementui 动态创建下拉框
  3. 操作系统上机作业--多线程排序
  4. Python3.6 IDLE 使用 multiprocessing.Process 不显示执行函数的打印
  5. LeetCode 572. 另一个树的子树 思考分析
  6. 【神经网络八股扩展】:数据增强
  7. ctype函数_PHP Ctype(字符类型)函数
  8. Java ByteArrayOutputStream reset()方法及示例
  9. 2013年 833c语言程序 江南大学 (A卷)
  10. python爬虫源代码_零基础自学爬虫(5)B站有哪些爬虫的视频学习资源-附Python源代码...