我发现我的构造方法好像不太一样而且比较显然?……先读入 \(q\) 数组(下表从零开始)。

记 \(i < j\) 时,\(a_{i-j}=-1/i^2\);\(i > j\) 时,\(a_{i-j}=1/i^2\);\(i = j\) 时,\(a_{i-j}=0\)。

答案 \(E_i=\sum_{j=0}^{n-1}a_{i-j}q_j\),可以用 FFT 优化,于是就做完了……吗?

发现 \(a\) 的下标可能会为负,那我们就整体平移一下,使得 \(E_i=\sum_{j=0}^{n-1}a_{i-j+n-1}q_j\),那么答案就是 \(E\) 数组的 \(0+n-1 \ldots n-1+n-1\) 项了。(原先是 \(0 \ldots n-1\) 项)

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. int n, lim=1, limcnt, rev[524305];
  6. double q[100005];
  7. const double PI=acos(-1.0);
  8. struct Complex{
  9. double x, y;
  10. Complex(double u=0.0, double v=0.0){
  11. x = u; y = v;
  12. }
  13. Complex operator+(const Complex &u)const{
  14. return Complex(x+u.x, y+u.y);
  15. }
  16. Complex operator-(const Complex &u)const{
  17. return Complex(x-u.x, y-u.y);
  18. }
  19. Complex operator*(const Complex &u)const{
  20. return Complex(x*u.x-y*u.y, x*u.y+y*u.x);
  21. }
  22. }a[524305], b[524305];
  23. void fft(Complex a[], int opt){
  24. for(int i=0; i<lim; i++)
  25. if(i<rev[i])
  26. swap(a[i], a[rev[i]]);
  27. for(int i=2; i<=lim; i<<=1){
  28. int tmp=i>>1;
  29. Complex wn=Complex(cos(2*PI/i), opt*sin(2*PI/i));
  30. for(int j=0; j<lim; j+=i){
  31. Complex w=Complex(1.0, 0.0);
  32. for(int k=0; k<tmp; k++){
  33. Complex tmp1=a[j+k], tmp2=w*a[j+k+tmp];
  34. a[j+k] = tmp1 + tmp2;
  35. a[j+k+tmp] = tmp1 - tmp2;
  36. w = w * wn;
  37. }
  38. }
  39. }
  40. if(opt==-1)
  41. for(int i=0; i<lim; i++)
  42. a[i].x /= lim;
  43. }
  44. int main(){
  45. cin>>n;
  46. for(int i=0; i<n; i++)
  47. scanf("%lf", &b[i].x);
  48. for(int i=-n+1; i<=n-1; i++){
  49. if(i<0)
  50. a[i+n-1].x = -1.0 / i / i;
  51. else if(i==0)
  52. a[i+n-1].x = 0;
  53. else
  54. a[i+n-1].x = 1.0 / i / i;
  55. }
  56. while(lim<=3*(n-1)) lim <<= 1, limcnt++;
  57. for(int i=0; i<lim; i++)
  58. rev[i] = (rev[i>>1]>>1) | ((i&1)<<(limcnt-1));
  59. fft(a, 1);
  60. fft(b, 1);
  61. for(int i=0; i<lim; i++)
  62. a[i] = a[i] * b[i];
  63. fft(a, -1);
  64. for(int i=0; i<n; i++)
  65. printf("%.12f\n", a[i+n-1].x);
  66. return 0;
  67. }

luogu3338 [ZJOI2014]力的更多相关文章

  1. [ZJOI3527][Zjoi2014]力

    [ZJOI3527][Zjoi2014]力 试题描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi.试求Ei. 输入 包含一个整数n,接下来n行每行输入一个数,第i行表示qi. 输出 有n ...

  2. bzoj3527: [Zjoi2014]力 fft

    bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

  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. 【BZOJ 3527】 3527: [Zjoi2014]力 (FFT)

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

  5. [洛谷P3338] [ZJOI2014]力

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

  6. P3338 [ZJOI2014]力(FFT)

    题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...

  7. [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)

    题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ...

  8. 笔记-[ZJOI2014]力

    [ZJOI2014]力 \[\begin{split} E_j=&\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{ ...

  9. 【Bzoj3527】【Luogu3338】[Zjoi2014]力(FFT)

    题面 Bzoj Luogu 题解 先来颓柿子 $$ F_i=\sum_{j<i}\frac{q_iq_j}{(i-j)^2}-\sum_{j>i}\frac{q_iq_j}{(i-j)^2 ...

随机推荐

  1. 表格<table>

    <table> <tr> <th>表头1</th> <th>表头2</th> <th>表头3</th> ...

  2. 将vim配置成一个轻量的IDE开发工具

    1.插件管理工具 2.安装插件 3.配置.vimrc 1.插件管理工具 vim的插件有很多,为了后面方便添加新的插件,我们需要一个插件管理工具来帮我们管理安装的插件,这里使用的是vim-pathoge ...

  3. [转]linux远程登入不需要密码

    如何通过一台linux ssh远程其他linux服务器时,不要输入密码,可以自动登入.提高远程效率,不用记忆各台服务器的密码. 工具/原料   ssh,ssh-keygen,scp 方法/步骤     ...

  4. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

  5. Cocos2d-x v3.1 坐标系统(五)

    Cocos2d-x v3.1 坐标系统(五) 为了能够更好的布局以及了解对象所在的位置,我们必须对Cocos2d-x中的坐标有详细的了解,本篇文章主要就是了解Cocos中用到的坐标系统.学过数学的人都 ...

  6. nodejs请求中获取参数值的方法

    req.params.xxxxx 从path中的变量 req.query.xxxxx 从get中的?xxxx=中 req.body.xxxxx 从post中的变量

  7. linux 命令——58 ss(转)

    telnet 命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是 Internet远程登陆服务的标准协议和主要方式.它为 ...

  8. SAP Cloud for Customer Extensibility的设计与实现

    今天的文章来自Jerry的同事,SAP成都研究院C4C开发团队的开发人员徐欢(Xu Boris).徐欢就坐我左手边的位置,因此我工作中但凡遇到C4C的技术问题,一扭头就可以请教他了,非常方便.下图是他 ...

  9. RHEL7 本地yum源配置

    配置yum 源 1.挂载DVD光盘到/mnt   因为配置时候路径名里面不能有空格,否则不能识别  [root@ mnt]# mount /dev/cdrom /mnt 2.在目录/etc/yum.r ...

  10. 【洛谷3796】【模板】AC自动机(加强版)

    点此看题面 大致题意: 一道模板题,给你\(N\)个模式串和一个文本串,要你求出在文本串中出现次数最多的若干个模式串并输出它们. \(AC\)自动机 都说了是\(AC\)自动机的模板题,做法肯定是\( ...