题意:

解:

介绍两种方法。

首先可以把那个最后除的qi拆掉。

①分前后两部分处理。

前一部分可以看做是个卷积。下面的平方不拆开,直接看成gi-j即可。

后一部分按照套路,把循环变量改成从0开始,反转q,之后也是卷积。

②直接构造函数卷积。

题解

我写的第一种。

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4.  
  5. const int N = ;
  6. const double pi = 3.1415926535897932384626;
  7.  
  8. struct cp {
  9. double x, y;
  10. cp(double X = , double Y = ) {
  11. x = X;
  12. y = Y;
  13. }
  14. inline cp operator +(const cp &w) const {
  15. return cp(x + w.x, y + w.y);
  16. }
  17. inline cp operator -(const cp &w) const {
  18. return cp(x - w.x, y - w.y);
  19. }
  20. inline cp operator *(const cp &w) const {
  21. return cp(x * w.x - y * w.y, x * w.y + y * w.x);
  22. }
  23. }f[N << ], g[N << ], h[N << ];
  24.  
  25. int r[N << ];
  26.  
  27. inline void FFT(int n, cp *a, int f) {
  28. for(int i = ; i < n; i++) {
  29. if(i < r[i]) {
  30. std::swap(a[i], a[r[i]]);
  31. }
  32. }
  33.  
  34. for(int len = ; len < n; len <<= ) {
  35. cp Wn(cos(pi / len), f * sin(pi / len));
  36. for(int i = ; i < n; i += (len << )) {
  37. cp w(, );
  38. for(int j = ; j < len; j++) {
  39. cp t = a[i + len + j] * w;
  40. a[i + len + j] = a[i + j] - t;
  41. a[i + j] = a[i + j] + t;
  42. w = w * Wn;
  43. }
  44. }
  45. }
  46.  
  47. if(f == -) {
  48. for(int i = ; i <= n; i++) {
  49. a[i].x /= n;
  50. }
  51. }
  52. return;
  53. }
  54.  
  55. int main() {
  56. int n;
  57. scanf("%d", &n);
  58. n--;
  59. for(int i = ; i <= n; i++) {
  60. scanf("%lf", &f[i].x);
  61. h[n - i].x = f[i].x;
  62. }
  63. g[].x = ;
  64. for(int i = ; i <= n; i++) {
  65. g[i].x = ((double)()) / i / i;
  66. }
  67.  
  68. int len = , lm = ;
  69. while(len <= n + n) {
  70. len <<= ;
  71. lm++;
  72. }
  73. for(int i = ; i <= len; i++) {
  74. r[i] = (r[i >> ] >> ) | ((i & ) << (lm - ));
  75. }
  76.  
  77. FFT(len, f, );
  78. FFT(len, g, );
  79. FFT(len, h, );
  80. for(int i = ; i <= len; i++) {
  81. f[i] = f[i] * g[i];
  82. g[i] = g[i] * h[i];
  83. }
  84. FFT(len, f, -);
  85. FFT(len, g, -);
  86.  
  87. for(int i = ; i <= n; i++) {
  88. printf("%lf\n", f[i].x - g[n - i].x);
  89. }
  90.  
  91. return ;
  92. }

AC代码

洛谷P3338 力的更多相关文章

  1. 洛谷 [P3338] 力

    FFT \[E_i = F_i / q_i = \sum_{i<j} \frac {q_j} {(i - j)^2} - \sum _{ i > j} \frac{q _ j} {(i - ...

  2. [洛谷P3338] [ZJOI2014]力

    洛谷题目链接:P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_ ...

  3. 洛谷 P3338 [ZJOI2014]力 解题报告

    P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...

  4. 【洛谷 P3338】 [ZJOI2014]力(FFT)

    题目链接 \[\Huge{E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^{n}\frac{q_j}{(i-j)^2}}\] 设\(A[i]= ...

  5. 洛谷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}$ ...

  6. 洛谷 P3338 [ZJOI2014]力

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

  7. 【洛谷P3338】力

    题目大意:求 \[ E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}} \] 题解:可以 ...

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

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

  9. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

随机推荐

  1. 【学亮IT手记】jQuery text()/html()回调函数实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  2. AdminLTE 前端框架

    适合运维平台  后台管理系统 AdminLTE 是一个开源的后台控制面板和仪表盘 WebApp 模板. 这是一个快速的HTML模板,基于CSS框架的引导. 文档: http://adminlte.la ...

  3. 如何在MAC上运行exe程序

    1. 首先下载并运行CrossOver 运行CrossOver需要收费,试用期为14天,运行CrossOver 2. 选择exe应用程序,新建容器,安装exe程序 3.安装成功后,运行exe应用程序启 ...

  4. Python——Radiobutton,Checkbutton参数说明

    anchor  : 文本位置: background(bg) : 背景色: foreground(fg) :前景色: borderwidth :  边框宽度: width   : 组件的宽度: hei ...

  5. HJ212 CRC 16 (C#)

    算法 CRC16 校验寄存器赋值为 0xFFFF: 取被校验串的第一个字节赋值给临时寄存器: 临时寄存器与 CRC16 校验寄存器的高位字节进行"异或"运算,赋值给 CRC16 校 ...

  6. 10.Service资源发现

    Kubernetes Pods是不可控的.每当一个pod停止后,他不是重启,而是重建.ReplicaSets特别是Pods动态地创建和销毁(例如,当向外扩展或向内扩展时).虽然每个PodIP地址都有自 ...

  7. python之旅六【第六篇】模块

    json和pickle 用于序列化的两个模块json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四 ...

  8. appium 原理解析(转载雷子老师博客)

    appium 原理解析 原博客地址:https://www.cnblogs.com/leiziv5/p/6427609.html Appium是 c/s模式的appium是基于 webdriver 协 ...

  9. 【BZOJ2144】Throw 数论

    题目大意 给你三个数\(a,b,c\),每次你可以选择一个数\(s_1\),再选择一个数\(s_2\),把\(s_1\)变成\(2s_2-s_1\),但要求\(s_3\)不在\(s_1\)到\(2s_ ...

  10. python学习日记(迭代器、生成器)-乱七八糟

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...