代换一下变成多项式卷积,这里是的答案是两个卷积相减,FFT求一下两个卷积就可以啦

详细的题解:http://www.cnblogs.com/iwtwiioi/p/4126284.html

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N = 500003;
  7. const double Pi = acos(- 1.0);
  8. struct cp {
  9. double r, i;
  10. cp (double _r = 0.0, double _i = 0.0) : r(_r), i(_i) {}
  11. cp operator + (const cp &x) const {return cp(r + x.r, i + x.i);}
  12. cp operator - (const cp &x) const {return cp(r - x.r, i - x.i);}
  13. cp operator * (const cp &x) const {return cp(r * x.r - i * x.i, r * x.i + i * x.r);}
  14. };
  15. int rev[N];
  16. cp A[N];
  17. void DFT(cp *a, int n, int flag) {
  18. for(int i = 0; i < n; ++i) A[rev[i]] = a[i];
  19. for(int i = 0; i < n; ++i) a[i] = A[i];
  20. for(int m = 2; m <= n; m <<= 1) {
  21. cp wn(cos(2.0 * Pi / m * flag), sin(2.0 * Pi / m * flag));
  22. int mid = m >> 1;
  23. for(int i = 0; i < n; i += m) {
  24. cp w(1.0);
  25. for(int j = 0; j < mid; ++j) {
  26. cp u = a[i + j], t = a[i + j + mid] * w;
  27. a[i + j] = u + t;
  28. a[i + j + mid] = u - t;
  29. w = w * wn;
  30. }
  31. }
  32. }
  33. if (flag == -1)
  34. for(int i = 0; i < n; ++i)
  35. a[i].r /= n;
  36. }
  37. void init(int &n) {
  38. int k = 1, L = 0;
  39. for(; k < n; k <<= 1, ++L);
  40. n = k;
  41. for(int i = 0; i < n; ++i) {
  42. int t = i, ret = 0;
  43. for(int j = 0; j < L; ++j)
  44. ret <<= 1, ret |= (t & 1), t >>= 1;
  45. rev[i] = ret;
  46. }
  47. }
  48. void FFT(double *x, double *y, cp *a, cp *b, int len) {
  49. for(int i = 0; i < len; ++i) a[i].r = x[i], a[i].i = 0.0;
  50. for(int i = 0; i < len; ++i) b[i].r = y[i], b[i].i = 0.0;
  51. DFT(a, len, 1); DFT(b, len, 1);
  52. for(int i = 0; i < len; ++i) a[i] = a[i] * b[i];
  53. DFT(a, len, -1);
  54. }
  55. cp a[N], b[N];
  56. int n, len;
  57. double g[N], q[N], f[N], ans[N];
  58. int main() {
  59. scanf("%d", &n); len = (n << 1) + 1;
  60. init(len);
  61. for(int i = 1; i <= n; ++i) scanf("%lf", &q[i]);
  62. for(int i = 1; i <= n; ++i) g[i] = 1.0 / i / i;
  63. for(int i = 0; i < n; ++i) f[i] = q[n - i];
  64.  
  65. FFT(q, g, a, b, len);
  66. for(int i = 1; i <= n; ++i) ans[i] = a[i].r;
  67. FFT(f, g, a, b, len);
  68. for(int i = 1; i <= n; ++i) ans[i] -= a[n - i].r;
  69. for(int i = 1; i <= n; ++i) printf("%.3lf\n", ans[i]);
  70.  
  71. return 0;
  72. }

题面如下,BZOJ上没有题面喔:


Description

给出n个数qi,给出Fj的定义如下: 
 
令Ei=Fi/qi,求Ei.

Input

第一行一个整数n。 
接下来n行每行输入一个数,第i行表示qi。

Output

n行,第i行输出Ei。 
与标准答案误差不超过1e-2即可。

Sample Input

  1. 5
  2. 4006373.885184
  3. 15375036.435759
  4. 1717456.469144
  5. 8514941.004912
  6. 1410681.345880

Sample Output

  1. -16838672.693
  2. 3439.793
  3. 7509018.566
  4. 4595686.886
  5. 10903040.872

Hint

对于30%的数据,n≤1000。 
对于50%的数据,n≤60000。 
对于100%的数据,n≤100000,0<qi<1000000000。

Source

感谢nodgd放题

【BZOJ 3527】【ZJOI 2014】力的更多相关文章

  1. [ZJOI 2014]力

    Description 给出n个数qi,给出Fj的定义如下: $$F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i ...

  2. 解题:ZJOI 2014 力

    题面 事实说明只会FFT板子是没有用的,还要把式子推成能用FFT/转化一下卷积的方式 虽然这个题不算难的多项式卷积 稍微化简一下可以发现实际是$q_i$和$\frac{1}{(i-j)^2}$在卷,然 ...

  3. BZOJ 3527 力 | FFT

    BZOJ 3527 力 | 分治 题意 给出数组q,$E_i = \sum_{i < j} \frac{q_i}{(i - j) ^ 2} - \sum_{i > j} \frac{q_i ...

  4. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  5. [BZOJ 1412][ZJOI 2009] 狼和羊的故事

    题目大意 有一个 (n times m) 的网格,每一个格子上是羊.狼.空地中的一种,羊和狼可以走上空地.现要在格子边上建立围栏,求把狼羊分离的最少围栏数. (1 leqslant n, ; m le ...

  6. 【BZOJ 3527】 3527: [Zjoi2014]力 (FFT)

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

  7. BZOJ 3527: [Zjoi2014]力

    Description 求 \(E_i=\sum _{j=0}^{i-1} \frac {q_j} {(i-j)^2}-\sum _{j=i+1}^{n-1} \frac{q_j} {(i-j)^2} ...

  8. BZOJ 3527: [ZJOI2014]力(FFT)

    BZOJ 3527: [ZJOI2014]力(FFT) 题意: 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下: \[F_j=\sum \limits _ {i < j} \fra ...

  9. ●BZOJ 3527 [Zjoi2014]力

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

随机推荐

  1. HDU5492 Find a path[DP 方差]

    Find a path Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. Unity3D粒子系统 合集

    http://www.cnblogs.com/qinyuanpei/p/3659513.htmlhttp://www.cnblogs.com/qinghuaideren/p/3597666.html

  3. JAVA代码中加了Try...Catch的执行顺序

    public static String getString(){ try { //return "a" + 1/0; return "a"; } catch ...

  4. Ubuntu下初学ROS时所遇小问题

    [1]运行命令$ rospack depends1 beginner_tutorials 时,提示 : [rospack] Error: no such package beginner_tutori ...

  5. android java.io.IOException: open failed: EBUSY (Device or resource busy)

    今天遇到一个奇怪的问题, 测试在程序的下载界面,下载一个文件第一次下载成功,删除后再下载结果下载报错, 程序:file.createNewFile(); 报错:java.io.IOException: ...

  6. 使用华为U8860测试时出现“Unable to open log device '/dev/log/main': No such file or directory”

    这是因为华为默认禁掉了log输出, 解决办法: 拨号: *#*#2846579#*#* 会显示工程菜单, Go to "ProjectMenu" -> "Backg ...

  7. 開博客了, 因為搞Delphi 開發的關於Delphi學習

    開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...

  8. 拒绝了对对象 'XXX' (数据库 'XXX',架构 'dbo')的 SELECT 权限

    2010-04-17 23:16 在IIS里测试ASP.NET网站时会遇到这样的问题(ASP.NET+SQL2005)我自己的解决方法是这样的: 1.打开SQL2005管理界面(没有安装SQLServ ...

  9. maven: 打包可运行的jar包(java application)及依赖项处理

    IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: <plugin> <groupId>org.codehau ...

  10. HDU2444-The Accomodation of Students-判断是否为二分图+ISAP

    要先判断是不是二分图.用黑白染色法. 遇到已经染过的跟当前的颜色相同时就说明不是二分图,也即出现了奇环 /*---------------------------------------------- ...