题意:给定 \({q_i}\),求

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

Solution: 我们令

\[p_i = \frac{1}{(j-i)^2}
\]

那么很容易将\(E_i\)处理为卷积形式

\[E_i = \sum_{i<j}{p_{j-i}q_j} - \sum_{i>j}{p_{i-j}q_j}
\]

可以暴力地把两边分开处理,不需要的区域直接置为\(0\),对于下标出现负数的暴力加上一个\(n\)即可。最终我们将答案转化为

\[E_i = \sum_{i<j}{p_{j-i}q'_{n-i-1}} - \sum_{i>j}{p_{i-j}q_j}
\]

其中 \(q'\) 是\(q\)的翻转序列,即 \(q'_i=q_{n-i-1}\) 。

之所以在这个算式里仍然需要考虑负数下标,是因为我们在做卷积的时候无法对 \(i<j\) 和 \(i>j\) 这样的约束进行满足,因此我们将 \(p\) 序列整体平移一个 \(n\) 即可。

poly p,q;

int main() {
int n;
scanf("%d",&n);
q.read(n-1);
p.c.resize(n+n);
for(int i=0;i<=n;i++) p.c[i]=0;
for(int i=1;i<n;i++) p.c[n+i]=1.0/((double)i*(double)i);
poly A=p*q;
reverse(q.c.begin(),q.c.end());
poly B=p*q;
for(int i=0;i<n;i++) {
printf("%.3lf\n",-B.c[2*n-i-1]+A.c[n+i]);
}
}

当然很容易发现这样做毫无必要。既然我们已经对下标为负数的情况做了处理,不妨顺便把它利用上。

poly p,q;

int main() {
int n;
scanf("%d",&n);
q.read(n-1);
p.c.resize(n+n);
for(int i=1;i<n;i++)
p.c[n+i]=1.0/((double)i*(double)i),
p.c[n-i]=-1.0/((double)i*(double)i);
poly A=p*q;
for(int i=0;i<n;i++) {
printf("%.3lf\n",A.c[n+i]);
}
}

最新文章

  1. Kafka 文档用例
  2. Android中的Service小结
  3. 如何做好presentation
  4. SQL查询性能分析
  5. Office 2007在安装过程中出错-解决办法
  6. Balance_01背包
  7. ThinkPHP中的模型
  8. php读取excel日期类型数据的例子
  9. 百度地图api的实现
  10. PC-ADSL开机自动拨号方法
  11. PHP CodeBase: 生成N个不重复的随机数
  12. JS中的call()方法和apply()方法用法总结
  13. WAP用户评论简单实现瀑布流加载
  14. [日常] Go语言圣经--示例: 并发的Clock服务习题
  15. Jackson 教程演示样例
  16. Java 8 – Filter a Map examples
  17. oracle改变表中列的编码
  18. Bootstrap_CSS概览
  19. ntp-redhat 同步时间配置
  20. No toolchains found in the NDK toolchains folder for ABI with prefix

热门文章

  1. jQuery---小火箭返回顶部案例
  2. 适合小白的大白话讲解---&gt;Git与Github的区别
  3. mac 电脑画图软件相关
  4. LOJ #2831. 「JOISC 2018 Day 1」道路建设 线段树+Link-cut-tree
  5. 安装MongoDB到CentOS(YUM)
  6. TChart-图表编辑器的测试
  7. 0008 基于DRF框架开发(01 DRF开发的基本流程)
  8. PAT (Basic Level) Practice (中文)1043 输出PATest (20 分)
  9. 视频格式转换mp4
  10. Socket之TCP-IP